Einige „Fallstricke“ beim Upgrade der MySQL-Datenbank

Einige „Fallstricke“ beim Upgrade der MySQL-Datenbank

Bei kommerziellen Datenbanken hat die Datenbankaktualisierung eine hohe Priorität. Es gibt einen Fahrplan für die Versionsaktualisierung, entsprechende Patches und eine Reihe von Übungen für den Plan. Es ist offensichtlich ein harter Kampf. In MySQL-Richtung wurde das Upgrade-Problem stark heruntergespielt, als ob es nur seine Existenz beweisen könnte. Natürlich habe ich heute gerade wegen dieser mangelnden Aufmerksamkeit viele Umwege gemacht.

Generell gibt es zwei mögliche Lösungen für das Upgrade von MySQL. Eine besteht darin, das Datenwörterbuch direkt zu aktualisieren, was auf dem lokalen Computer durchgeführt wird. Der gesamte Vorgang umfasst Offline-Operationen und unterbricht den Geschäftsbetrieb. Die zweite besteht darin, durch Hochverfügbarkeit einen reibungslosen Wechsel zu erreichen. Das Prinzip besteht darin, eine Datenreplikationsbeziehung von einer niedrigen Version zu einer hohen Version herzustellen. Diese Lösung hat offensichtliche Vorteile, ist für den Geschäftsbetrieb am wenigsten invasiv, kann im Voraus überprüft werden und ermöglicht sogar ein reibungsloses Rollback. Natürlich erfordert die zweite Lösung eine Menge Vorbereitung.

Die Umgebung, mit der wir uns heute befassen, verwendet die erste Methode basierend auf Faktoren wie Speicherung und Dauer. Der gesamte Prozess läuft wie folgt ab:

1) Verwenden Sie mysqldump, um die Datenbank zu sichern. Die Sicherungsdatei ist etwa 120 GB groß.

2) Stoppen Sie die MySQL 5.5-Datenbank

3) Ändern Sie den Datenbankport und starten Sie die Datenbank neu. Ändern Sie ihn beispielsweise von 4308 auf 4318, um Auswirkungen anderer Geschäftsverbindungen während des Migrationsprozesses zu vermeiden. Stoppen Sie die Datenbank nach der Überprüfung.

4) Ändern Sie den mysql_base-Pfad auf Version 5.7 und ändern Sie die Umgebungsvariablenkonfiguration wie /usr/bin/mysql

5) Ersetzen Sie die Konfigurationsdatei durch Version 5.7 und starten Sie die Datenbank im 5.7-Modus

6) Verwenden Sie den Upgrade-Modus, um das Datenwörterbuch zu aktualisieren. Der Befehl lautet wie folgt:

mysql_upgrade --socket=/data/mysql_4306/tmp/mysql.sock --port=4308 -uroot -pxxxx

7) Inspektion und Überprüfung

Der gesamte Prozess sieht zwar in Ordnung aus, ist in der Praxis jedoch voller Schlupflöcher.

1) Verwenden Sie mysqldump, um die Datenbank zu sichern. Die Sicherungsdatei ist etwa 120 G groß. Für eine schnelle Online-Sicherung wird mysqldump verwendet. Die Wiederherstellungseffizienz wird jedoch unter abnormalen Bedingungen beeinträchtigt. Daher wird die Verwendung von mysqldump für die Sicherung nicht empfohlen. Stattdessen wird empfohlen, eine physische Sicherung zu verwenden. Wenn die Bedingungen es zulassen, verwenden Sie direkt den Cold-Backup-Modus.

2) Stoppen Sie die MySQL 5.5-Datenbank

3) Ändern Sie den Datenbankport und starten Sie die Datenbank neu. Ändern Sie ihn beispielsweise von 4308 auf 4318, um Auswirkungen anderer Geschäftsverbindungen während des Migrationsprozesses zu vermeiden. Stoppen Sie die Datenbank nach der Überprüfung.

4) Ändern Sie den mysql_base-Pfad auf Version 5.7 und ändern Sie die Umgebungsvariablenkonfiguration wie /usr/bin/mysql

5) Ersetzen Sie die Konfigurationsdatei durch Version 5.7 und starten Sie die Datenbank im 5.7-Modus. Ich habe nicht auf die Konfiguration von ibdata geachtet. Leider stieß ich auf eine seltsame Konfiguration wie folgt:

innodb_data_file_path = ibdata1:1000M;ibdata2:100M:autoextend

Die ursprüngliche Standardkonfiguration ist eine ibdata-Datei wie folgt:

innodb_data_file_path = ibdata1:1G:autoextend,

Dies führt zu einer Fehlermeldung beim Starten der Datenbank, die darauf hinweist, dass die ibdata-Datei beschädigt ist.

6) Verwenden Sie den Upgrade-Modus, um das Datenwörterbuch zu aktualisieren. Der Befehl lautet wie folgt:

mysql_upgrade --socket=/data/mysql_4306/tmp/mysql.sock --port=4308 -uroot -pxxxx

Die Implementierungsaufforderung des Upgrade-Befehls war nicht benutzerfreundlich genug und hat viele Fehler ausgegeben, aber am Ende hat es mich tatsächlich beruhigt und mir mitgeteilt, dass das Upgrade erfolgreich war. Als das Problem dieses Stadium erreichte, war es tatsächlich schwer zu lösen. Da die Datenwörterbuchdatei beschädigt war, war es unmöglich, das Datenwörterbuch zu aktualisieren. Jetzt konnte die Datenbank nicht einmal die darin enthaltenen Tabellen auslesen.

7) Inspektion und Überprüfung. Die ursprünglich problemlos zu erledigenden Überprüfungsarbeiten sind nun zu dringenden Reparaturarbeiten geworden.

Die darauf folgende erste Welle von Abhilfemaßnahmen sah folgendes vor:

8) Es dauerte etwa eine Stunde, die Daten mithilfe des vorhandenen physischen Backups wiederherzustellen, das am frühen Morgen erstellt wurde. Ich habe die Wiederherstellung mit mysqldump aufgegeben und ich erinnere mich, dass es mindestens 6 Stunden dauerte.

9) Sichern Sie die aktuelle Datenbank im physischen Sicherungsmodus

10) Aktualisieren Sie die Datenbank erneut und achten Sie dabei besonders auf die Konfiguration von ibdata. Wenn das Upgrade fehlschlägt, verwenden Sie ein physisches Backup, um schnell ein Rollback durchzuführen.

11) Der Upgrade-Prozess wurde erneut blockiert, diesmal mit sql_mode. Das Systemdatenwörterbuch wurde erfolgreich aktualisiert, aber während der Datenbanktabellenerkennung schlug die Formatüberprüfung vieler Datentabellen fehl, hauptsächlich aufgrund der Datenformatüberprüfung von sql_mode. Ein Rekonstruktionsvorgang wie alter table test.xxxxx force war erforderlich.

12) Aus unbekannten Gründen war während des Wiederherstellungsprozesses auch das Redo-Protokoll von InnoDB betroffen und das Protokoll begann, Fehler auszugeben. Daher weist das Wörterbuch der aktuell wiederhergestellten Datenbank auch dann noch einige Mängel auf, wenn es erfolgreich aktualisiert wurde.

Die anschließende zweite Welle von Abhilfemaßnahmen sieht folgendes vor:

13) Verwenden Sie mysqldump, um die aktuelle Datenbank zu sichern, sichern Sie nur die angegebene Datenbank, verwenden Sie nicht die Option „Alle Datenbanken“ und exportieren Sie die Berechtigungen separat.

14) Stellen Sie eine Instanz von MySQL 5.7 bereit, und verwenden Sie dabei einen anderen Port, beispielsweise Port 4390

15) sql_mode wird ab Version 5.5 mit Platzhaltern versehen und andere Parameter werden geändert.

16) Importieren Sie mysqldump-Daten in die 4390 5.7-Instanz

17) Richten Sie eine Master-Slave-Replikationsbeziehung ein

18) Wechseln Sie den Datenbank-Port, um den neuen Dienst der Version 5.7 wirksam zu machen

Der gesamte Prozess war voller Wendungen. Ich versuchte, jede Herausforderung mit meiner eigenen Strategie zu bewältigen und Abkürzungen zu nehmen, aber am Ende stellte ich fest, dass ich in keine Falle getappt war. Dies lehrte mich auch eine wichtige Lektion: Nimm es nie auf die leichte Schulter und gehe Probleme nie mit einer „Versuch dein Glück“-Haltung an.

Oben sind einige „Fallen“ bei MySQL-Datenbank-Upgrades aufgeführt. Weitere Informationen zu MySQL-Datenbank-Upgrades finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Ausführliches Tutorial zu Installations- und Upgradeproblemen bei MySQL 5.7.30
  • Upgrade der Docker-Version von MySQL 5.7 auf MySQL 8.0.13, Datenmigration
  • phpstudy2018-Tutorial zum Upgrade von MySQL 5.5 auf 5.7 (mit Bildern und Text)
  • Fallstricke und Lösungen für das Upgrade von MySQL 5.7.23 in CentOS 7
  • Einige Fallstricke, auf die Entwickler nach dem Upgrade auf MySQL 5.7 achten müssen
  • Best Practices für MySQL-Upgrades
  • So aktualisieren Sie die MySQL-Version in phpStudy auf 5.7.17
  • So aktualisieren Sie MySQL 5.6 auf 5.7 unter Windows
  • Detailliertes Tutorial zum Upgrade der kostenlosen Installationsversion von MySQL 5.7.17 unter Windows (x86, 64 Bit)

<<:  Vue + OpenLayers Schnellstart-Tutorial

>>:  Detaillierte Erläuterung der Verwendung des Linux-Zeitbefehls

Artikel empfehlen

Natives JS zum Erzielen eines funkelnden Sterneneffekts

In diesem Artikelbeispiel wird der spezifische Co...

CSS implementiert fünf gängige 2D-Transformationen

2D-Transformationen in CSS ermöglichen es uns, ei...

CSS3 erzielt einen coolen 3D-Rotationsperspektiveneffekt

CSS3 erreicht coole 3D-Rotationsperspektive 3D-An...

Können Sie alle Testfragen zum Erstellen der Webseite beantworten?

Fragen zum Webdesign. Können Sie alle beantworten...

Details zur JS-Array-Deduplizierung

Inhaltsverzeichnis 1 Testfälle 2 JS-Array-Dedupli...

Hinweise zum Systemaufruf des Linux-Kernel-Gerätetreibers

/**************************** * Systemaufruf*****...

Nginx definiert die Zugriffsmethode für Domänennamen

Ich erstelle derzeit Nginx, kann aber nicht über ...

Auswahl der MySQL-Tabellentyp-Speicher-Engine

Inhaltsverzeichnis 1. Zeigen Sie die Speicher-Eng...

Beispielschritte zur Verwendung von AntV X6 mit Vue.js

Inhaltsverzeichnis 0x0 Einführung 0x1 Installatio...