Schritte und Fallstricke beim Upgrade von Linux MySQL 5.5 auf MySQL 5.7

Schritte und Fallstricke beim Upgrade von Linux MySQL 5.5 auf MySQL 5.7

Linux MySQL 5.5 auf MySQL 5.7 aktualisiert

Im Folgenden werde ich einen einfachen Schritt zum Upgrade von MySQL erläutern. Später hat der Herausgeber von 123WORDPRESS.COM mehrere Ergänzungen zusammengestellt, auf die Sie zurückgreifen können.

1. Laden Sie mysql5.7.32 herunter

Offizielle Download-Adresse: https://dev.mysql.com/downloads/mysql/

Entpacken

tar xvf mysql.tar.gz mysql/

2. Rufen Sie das alte MySQL-Bin-Verzeichnis auf und exportieren Sie die MySQL-Daten

./mysql -uroot -pxxxx -h127.0.0.1 -P3306 </home/mysql5.5/bin/all.sql

3. Geben Sie das neue MySQL-Stammverzeichnis ein und erstellen Sie ein Datenverzeichnis zum Speichern von Daten

mkdir-Daten

4. Führen Sie für die neu entpackte Datenbank zuerst den Initialisierungsbefehl aus

CD-Behälter
./mysql_install_db --basedir=../ --datadir=../data

PS: Das obige Upgrade läuft auf Cent OS, aber als ich Kylin aktualisierte, stellte ich fest, dass ich die obige Anweisung nicht erkannte und sie durch die folgende Initialisierungsanweisung ersetzen musste

./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root --initialize

5. Richten Sie die Anmeldung zum Überspringen des Passworts ein

Skip-Grant-Tabellen zu [mysqld] in my.cnf hinzufügen
my.cnf ist die Konfigurationsdatei für die Datenbank

6. Starten Sie den Dienst

./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root

7. Legen Sie ein Passwort fest

Melden Sie sich in einem neuen Befehlszeilenfenster bei MySQL an

./mysql -uroot
benutze MySQL;
mysql.user aktualisieren, authentication_string=password('xxxx') festlegen, wobei user='root';

8. Dienste beenden

Kommentieren Sie skip-grant-tables in der Konfigurationsdatei aus.

9. Starten Sie den Dienst

./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root

10. Neue Kommandozeilen-Anmeldung

./mysql -uroot -pxxxx
benutze MySQL;

Derzeit gilt: Unabhängig davon, welchen Befehl Sie ausführen, wird Ihnen immer die Meldung „Sie müssen Ihr Kennwort mit der Anweisung ALTER USER zurücksetzen, bevor Sie diese Anweisung ausführen.“ angezeigt.
Führen Sie dann die folgende Anweisung aus

PASSWORT FESTLEGEN = PASSWORT('xxxx');

11. Legen Sie andere IP-Adressen für die Verbindung zu MySQL fest

benutze MySQL;
gewähren Sie "root"@"%", gekennzeichnet durch "xxxx", alle Privilegien für *.*;

12. Historische Daten importieren

CD-Behälter
./mysql -uroot -pxxxx -h127.0.0.1 -P3306 </home/mysql5.5/bin/all.sql

13. Führen Sie das Update durch

CD-Behälter
./mysql_upgrade

14. Nach dem Upgrade können Abfrageanweisungen Fehler melden. Sie können die folgenden Anweisungen ausführen

Setzen Sie @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
SQL-Modus festlegen = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

Nachfolgend finden Sie Ergänzungen von anderen Internetnutzern

Upgrade von MySQL von 5.5 auf 5.7

Vor Kurzem habe ich die Aufgabe, MySQL von Version 5.5 auf 5.7 zu aktualisieren. Ich habe die Datenbank noch nie aktualisiert, daher kann ich nur durch Ausprobieren weitermachen. Ich habe online viele Informationen gefunden. Es gibt nur zwei Möglichkeiten zum Upgrade.

1. Upgrade-Methode

1. Logisches Upgrade: Verwenden Sie mysqldump, um SQL-Dateien direkt zu exportieren, erstellen Sie dann eine neue MySQL5.7-Datenbank und importieren Sie die exportierten SQL-Dateien in die neue Datenbank. Wenn diese Methode verwendet wird, wird natürlich empfohlen, nicht mysqldump, sondern mydumper zu verwenden. Da unser Unternehmen über eine große Datenmenge verfügt, haben wir diese Methode nicht zur Verarbeitung verwendet.

2. Direktes Upgrade: Diese Upgrade-Methode ist einfach und schnell. Sie ersetzt direkt das ursprüngliche MySQL-Installationsverzeichnis und die Konfigurationsdatei /etc/my.cnf und verwendet das Skript mysql_upgrade, um das Upgrade der Systemtabelle abzuschließen.

2. Umgebung Einführung

Unser MySQL-Cluster verwendet die Lese-/Schreibtrennung von Atlas und es gibt 4 Datenbankserver unter MySQL-Proxy:

Meister: 172.16.100.1

Sklave1:172.16.100.2

Sklave2:172.16.100.3

Sklave3:172.16.100.4

Aktuelle Datenbankversion: „5.5.21

Konfigurationsdatei: /etc/my.cnf

Datenverzeichnis: /data/mysql

Betriebssystemversion: CentOS6.9

3. Upgrade-Ideen

Da das Online-Geschäft nicht unterbrochen werden kann, haben wir uns entschieden, zuerst einen der Slaves aus dem Cluster zu entfernen und ihn auf MySQL 5.7 zu aktualisieren. Dann haben wir das MySQL 5.7-Gerät zum Cluster hinzugefügt. Nachdem die Daten synchronisiert wurden, haben wir die Master- und Slave-Knoten ausgetauscht und die anderen Slave-Knoten aktualisiert.

4. Üben

4.1. Loggen Sie sich bei mysql-proxy ein und werfen Sie einen der Slaves aus dem Cluster

mysql -uuser -ppwd -h127.0.0.1 -P234

Anzeigen der Backend-Proxy-Bibliothek

mysql> AUSWÄHLEN * VON Backends;

+-------------+----------------------+-------+------+
| backend_ndx | Adresse | Status | Typ |
+-------------+----------------------+-------+------+
| 1 | 172.16.100.1:3306 | nach oben | rw |
| 2 | 172.16.100.2:3306 | nach oben | ro |
| 3 | 172.16.100.3:3306 | nach oben | ro |
| 4 | 172.16.100.4:3306 | nach oben | ro |
+-------------+----------------------+-------+------+

5 Zeilen im Satz (0,00 Sek.)
Dienst 172.16.100.4 aus dem Cluster werfen
mysql> Backend 4 entfernen

4.2. Ersetzen Sie das Installationsverzeichnis von MySQL

Gehen Sie zur offiziellen Website von MySQL und laden Sie die MySQL5.7-Version mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz herunter

Entpacken Sie mysql5.7

tar -zxf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

Wenn Ihr vorheriges MySQL-Verzeichnis als Verknüpfung erstellt wurde, müssen Sie die Verknüpfung lediglich aufheben und erneut erstellen.

cd /usr/lokal/

MySQL-Verknüpfung aufheben

ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql

Wenn Ihr vorheriges MySQL-Verzeichnis nicht verknüpft ist, benennen Sie es um und verknüpfen Sie ein anderes MySQL-Verzeichnis.

cd /usr/lokal/

mv mysql mysql5.5

ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql (Es wird empfohlen, diese Methode so oft wie möglich zu verwenden, da sie für Upgrades bequemer ist.)

4.3. Starten Sie den MySQL-Dienst

Nach MySQL 5.7 muss die Datenbank nicht mehr initialisiert werden, d. h. der Befehl mysql_install_db muss nicht mehr ausgeführt werden.

/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql --skip-grant-tables --skip-networking &

ps -ef |grep mysql

Wenn ein Fehler auftritt, überprüfen Sie die Protokollinformationen

4.4. Aktualisieren Sie die Datenwörterbuchinformationen der Systemtabelle. Der Befehl lautet wie folgt:

/usr/loca/mysql/bin/mysql_upgrade

Die Ausgabe ist:

Möglicherweise treten einige Fehlermeldungen wie „ALTER TABLE ** FROCE“ auf. Machen Sie sich darüber keine Sorgen, MySQL repariert sie später automatisch. Die Reparaturzeit kann je nach Situation Ihrer Datenbank etwas lang sein. Diesmal habe ich für das Upgrade mehr als zwei Stunden gebraucht.

Wenn die Ausgabe „Upgrade-Vorgang erfolgreich abgeschlossen“ lautet, bedeutet dies, dass das Upgrade erfolgreich war.

4.5. MySQL nach dem Upgrade neu starten

/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql &

Überprüfen Sie, ob das Upgrade abgeschlossen ist. Wenn das Upgrade erfolgreich war, lautet die Ausgabe wie folgt

Diese MySQL-Installation wurde bereits auf 5.7.23 aktualisiert. Verwenden Sie --force, wenn Sie mysql_upgrade noch ausführen müssen.

4.6.Master-Slave-Konfiguration neu konfigurieren

Wiederholen Sie die Master-Slave-Konfiguration

mysql> ändere Master in Master master_host="172.16.100.1",master_user="***",master_passowrd="***",master_log_file=" mysql-bin.000004", master_log_pos=1083;

mysql> Slave starten;

mysql> Slave-Status anzeigen\G;

Wenn zwei Ja-Antworten vorhanden sind, bedeutet dies, dass der Zustand normal ist.

4.7 Einem Lese-/Schreib-Split-Cluster beitreten

Gehen Sie zum MySQL-Proxy-Gerät

mysql -uuser -ppwd -h127.0.0.1 -P234

mysql> SLAVE 172.16.100.4 HINZUFÜGEN

mysql> wähle * aus Backends;

Wenn der Status „aktiv“ lautet, bedeutet dies, dass der Cluster erfolgreich beigetreten ist.

Nachtrag:

Dies war mein erstes Datenbank-Upgrade und ich war mir nicht sicher, ob die Grundidee richtig war. Daher habe ich es zunächst in einer Testumgebung getestet und das Upgrade dann, nachdem ich es einige Tage lang getestet hatte und keine Probleme feststellen konnte, online durchgeführt. Nur als Referenz.

Die Fallstricke beim Upgrade von MySQL 5.5 auf 5.7

Die Geschichte geht so. Unser Unternehmen hat mehrere alte MySQL-Versionen von 5.5. Vor kurzem wurde das Projekt aktualisiert und mehrere Felder wurden hinzugefügt. Bei der Verwendung von spring-data-jpa zum automatischen Aktualisieren der Tabellenstruktur wurde ein Fehler gemeldet, da die MySQL-Version 5.5 nicht mehr als zwei current_timestamps als Standardwert in einer Tabelle unterstützt. Sie sollten daher ein Upgrade der Datenbank in Betracht ziehen

Überprüfen Sie zuerst die Version auf dem Server

Schauen Sie sich die Quelle noch einmal an


Oh, übrigens, unser Unternehmen verwendet AWS EC2, also stammen alle Quellen von amz

Ich habe „yum update mysql-server“ ausprobiert, aber das hat nicht geholfen, also habe ich weitergemacht.

Ich habe viel online gelesen und überall stand, dass man zuerst die alte Version der Datenbank deinstallieren und dann die neue Version der Datenbank installieren soll. Was soll ich dann mit meinen Daten machen? Um auf Nummer sicher zu gehen, habe ich zuerst die Datenbank gesichert, eine Datenbank nach der anderen. Ich habe gesehen, dass die MySQL-Datenbank auch viele Benutzer und Berechtigungen hatte, also habe ich auch MySQL gesichert und dann mit der Arbeit begonnen.

1. Deinstallieren Sie die Datenbank

yum entfernt MySQL-Server

Aber die Installation scheint hier anders zu sein, also habe ich alle deinstalliert, die Yum gerade gefunden hat.

Denken Sie daran, den MySQL-Dienst vor der Deinstallation zu deaktivieren. Andernfalls überprüfen Sie nach der Installation der neuen Version mit mysql --version, ob es sich um die MySQL-Anmeldung 5.7 oder 5.5 handelt. Starten Sie den Dienst anschließend neu, und es treten verschiedene Probleme auf. Da einige Dateien nicht gelöscht wurden, sah die neu installierte Datenbank sehr merkwürdig aus. . .

2. Installieren Sie eine neue Datenbank

yum-Suche mysql57

Schauen Sie zunächst, welche Versionen verfügbar sind, hierzu gibt es nichts zu sagen.

yum installiere msyql57-server.x86_64

Es ist ok, es zu installieren, mal sehen, was installiert ist


Eine seltsame Sache ist, dass mysql-config immer noch von 5.5 abhängt, aber ich habe bei der Verwendung keine Probleme festgestellt.

3. Konfiguration

Ändern Sie nach der Installation die folgende my.cnf

Mein Server befindet sich in /etc/my.cnf. Ich weiß nicht, ob sich andere Bilder geändert haben.

Beim Konfigurieren fiel mir plötzlich ein, dass der Datenspeicherplatz noch vorhanden ist. Ich konfigurierte ihn, um zu sehen, ob er genutzt werden kann.

Daher habe ich diese Zeile in my.cnf hinzugefügt (viele Konfigurationen in 5.5 sind veraltet und die vorherige my.cnf muss gelöscht werden, da sonst beim Starten ein Fehler gemeldet wird).


Nach der Konfiguration starten Sie den Dienst entschlossen

Dienst MySQLD starten

Tatsächlich habe ich einen Fehler gemeldet

Das Startprotokoll wurde überprüft

[FEHLER] Schwerwiegender Fehler: Die Tabelle mysql.user ist beschädigt. Bitte führen Sie mysql_upgrade aus.

FEHLER: Zend_Db_Adapter_Exception: SQLSTATE[HY000] [2002] Keine solche Datei oder kein solches Verzeichnis. Darüber hinaus ist eine Ausnahme beim Versuch aufgetreten, diesen Fehler zu melden: Zend_Exception Für den Schlüssel „translate“ (Abstract.php:144) ist kein Eintrag registriert.

Verdammt, was soll ich tun? Ich habe bei Google gesucht und diesen Artikel gefunden: https://support.plesk.com/hc/en-us/articles/115001659169-MySQL-fails-to-start-mysql-user-table-is-damaged

Die konkreten Lösungen sind wie folgt

a. Melden Sie sich beim Serverhost an

b. Durch Hinzufügen von Skip-Grant-Tabellen in der Datei /etc/my.cnf unter dem Abschnitt [mysqld] wird der abgesicherte Modus aktiviert (keine Kennwortüberprüfung oder ähnliches).

c. Dienst mysqld starten

d.mysql_upgrade

e. service mysqld restart

Ich habe mysql_upgrade ausgeführt


Ich habe die offizielle Dokumentation überprüft und die allgemeine Bedeutung ist, dass viele Dinge nach dem Upgrade nicht kompatibel sind. Der Beamte stellt dieses Skript zur Verfügung, um den vorherigen Arbeitsbereich zu reparieren

Das Upgrade verlief reibungslos. Alle Benutzer in der MySQL-Datenbank befanden sich noch in der vorherigen Datenbank und waren nicht betroffen.

Das Upgrade ist nun abgeschlossen

Dies ist das Ende dieses Artikels über die detaillierten Schritte zum Upgrade von Linux MySQL 5.5 auf MySQL 5.7. Weitere relevante Inhalte zum Upgrade von MySQL 5.5 auf 5.7 finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Einführung in den Installationsprozess von MySQL 8.0 in einer Linux-Umgebung
  • Einführung in häufig verwendete MySQL-Befehle in der Linux-Umgebung
  • Tutorial zur Installation von MySQL unter Linux
  • Tutorial zur Installation der mysql5.7.36-Datenbank in einer Linux-Umgebung

<<:  Webdesign: Implementierungstechniken für Webmusik

>>:  Lösen Sie das Problem des unzureichenden Docker-Festplattenspeichers

Artikel empfehlen

So ändern Sie das Root-Passwort von MySQL unter Linux

Vorwort Der Dienst wird seit mehreren Monaten auf...

Allgemeine Struktur-Tags in XHTML

Struktur Text, Kopf, HTML, Titel Text abbr, Akron...

Installationsprozess des mysql5.6.8-Quellcodes

Kernel: [root@opop ~]# cat /etc/centos-release Ce...

Lösung für den Konflikt zwischen Nginx und Backend-Port

Frage: Bei der Entwicklung des Alice-Verwaltungss...

Zusammenfassung der Binlog-Nutzung der MySQL-Datenbank (unbedingt lesen)

Ich werde nicht näher darauf eingehen, wie wichti...

Lösungen für Dateien/Ordner, die unter Linux nicht gelöscht werden können

Vorwort Kürzlich wurde unser Server von Hackern a...

Der Unterschied zwischen JS-Pre-Parsing und Variablen-Promotion im Web-Interview

Inhaltsverzeichnis Was ist eine Voranalyse? Der U...

Der Prozess der Bereitstellung eines Projekts auf einem anderen Host mit Jenkins

Umfeld Hostname IP-Adresse Aufschlag Jenkins 192....

So implementieren Sie Vue Page Jump

1. dies.$router.push() 1. Ansicht <Vorlage>...

Kreativer Eröffnungseffekt durch die Kombination von CSS 3.0 mit Video

Ich möchte Ihnen einen kreativen Einstieg vorstel...

HTML 5 Stylesheet zurücksetzen

Dieser CSS-Reset basiert auf dem CSS-Reset von Eri...