Erfahrungsaustausch zur Reparatur von MySQL InnoDB-Ausnahmen

Erfahrungsaustausch zur Reparatur von MySQL InnoDB-Ausnahmen

Eine Reihe von MySQL-Bibliotheken zum Testen. Die zuvor verwendete Version war MySQL 5.1.71 in der Standardquelle von centos6. Später wollte ich Percona Server 5.7 ausprobieren, da in dieser Bibliothek keine wichtigen Daten vorhanden waren. Daher wurde vor der Operation kein Backup durchgeführt. Nach der Konfiguration der Quelle wurde direkt die Installation durchgeführt. Die Datendateien werden auch am Standardspeicherort gespeichert. Starten Sie MySQL nach Abschluss der Installation direkt und stellen Sie fest, dass der Start fehlschlägt und dass es nicht normal gestartet werden kann.

1. Rollback und Neuinstallation von MySQL

Um den Aufwand beim Importieren dieser Daten von anderen Orten zu vermeiden, erstellen Sie zunächst eine Sicherungskopie der Datenbankdatei der aktuellen Bibliothek (Speicherort /var/lib/mysql/). Als Nächstes habe ich das Percona Server 5.7-Paket deinstalliert, das alte 5.1.71-Paket neu installiert, den MySQL-Dienst gestartet und die Meldung „Unbekannter/nicht unterstützter Tabellentyp: innodb“ angezeigt und konnte nicht normal gestartet werden.

110509 12:04:27 InnoDB: Pufferpool wird initialisiert, Größe = 384,0 M
110509 12:04:27 InnoDB: Initialisierung des Pufferpools abgeschlossen
InnoDB: Fehler: Protokolldatei ./ib_logfile0 hat eine andere Größe 0 5242880 Bytes
InnoDB: als in der .cnf-Datei angegeben 0 157286400 Bytes!
110509 12:04:27 [FEHLER] Die Initialisierungsfunktion des Plugins „InnoDB“ hat einen Fehler zurückgegeben.
110509 12:04:27 [FEHLER] Die Registrierung des Plugins „InnoDB“ als STORAGE ENGINE ist fehlgeschlagen.
110509 12:04:27 [FEHLER] Unbekannter/nicht unterstützter Tabellentyp: innodb
110509 12:04:27 [FEHLER] Abbruch
110509 12:04:27 [Hinweis] /usr/sbin/mysqld: Herunterfahren abgeschlossen

Löschen Sie das Verzeichnis /var/lib/mysql/, starten Sie den Datenbankdienst neu und initialisieren Sie ihn. Das ist normal. Der Befehl „show engines“ kann feststellen, dass eine InnoDB-Engine vorhanden ist. Stoppen Sie die Datenbank erneut, überschreiben Sie den Inhalt des zuvor gesicherten Verzeichnisses /var/lib/mysql/ mit dem Inhalt des aktuellen Speicherorts und starten Sie neu. Es wurde festgestellt, dass es nicht gestartet werden konnte und der Fehlerinhalt derselbe war wie zuvor.

Die Struktur des Verzeichnisinhalts /var/lib/mysql ist wie folgt:

-rw-rw---- 1 mysql mysql 10485760 26. Februar 18:10 ibdata1
-rw-rw---- 1 mysql mysql 5242880 26. Februar 18:10 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 26. Februar 17:20 ib_logfile1
drwx------ 2 mysql mysql 4096 26. Februar 17:20 mysql
drwx------ 2 mysql mysql 4096 Februar 26 17:24 wiki

Das Wiki-Verzeichnis ist die Bibliothek für Testdaten, die Datei ibdata1 ist die Datendatei, die beiden Dateien, die mit ib beginnen, sind Protokolldateien und das MySQL-Verzeichnis enthält Dinge, die mit der Systembibliothek in Zusammenhang stehen. Verwenden Sie die initialisierten Daten erneut und überschreiben Sie das Wiki-Verzeichnis und die ibdata1-Datei in das Verzeichnis /var/lib/mysql. Sie können normal starten und sich anmelden.

2. InnoDB-Modul neu installieren

Beim Sichern über mysqldump wird jedoch die Meldung „Unbekannte Tabellen-Engine „Innodb““ angezeigt. Nach dem Einloggen habe ich alle aktuellen Engine-Typen überprüft und festgestellt, dass tatsächlich kein InnoDB-Typ vorhanden war:

Ich habe den ALTER-Befehl verwendet, um den Typ einer der Tabellen in MyISAM zu ändern, habe jedoch festgestellt, dass der Fehler weiterhin auftrat.

Durch Suchen haben wir festgestellt, dass sich im Verzeichnis /usr/lib64/mysql/plugin/ eine Datei ha_innodb_plugin.so befindet. Ich habe den Eindruck, dass Versionen nach MySQL 5 die Online-Installation von Plug-Ins unterstützen. Überprüfen und bestätigen Sie unten, dass es tatsächlich unterstützt wird:

Beim Laden mit folgendem Befehl konnte kein Erfolg festgestellt werden:

Installieren Sie das Plugin InnoDB mit dem Sonamen „ha_innodb.so“.

3. Sicherung

Fügen Sie die folgende Konfiguration in /etc/my.cnf hinzu:

Plugin-Laden = innodb = ha_innodb_plugin.so
plugin_dir=/usr/lib64/mysql/plugin/
Standard-Speicher-Engine = InnoDB

Es stellte sich heraus, dass der Start immer noch fehlschlug. Beim Überprüfen von mysql-error.log habe ich Folgendes gefunden:

InnoDB: Datenbankseitenbeschädigung auf der Festplatte oder ein
InnoDB: Datei lesen von Seite 7.
InnoDB: Möglicherweise müssen Sie eine Wiederherstellung aus einer Sicherung durchführen.
InnoDB: Es ist auch möglich, dass Ihr Betriebssystem
InnoDB: Das System hat seinen eigenen Dateicache beschädigt
InnoDB: und ein Neustart Ihres Computers entfernt die
InnoDB: Fehler.
InnoDB: Wenn die beschädigte Seite eine Indexseite ist
InnoDB: Sie können auch versuchen, die Beschädigung zu beheben
InnoDB: durch Dumping, Dropping und Reimport
InnoDB: die beschädigte Tabelle. Sie können CHECK verwenden
InnoDB: TABLE, um Ihre Tabelle auf Beschädigungen zu überprüfen.
InnoDB: Siehe auch http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html

Öffnen Sie die offizielle Seite zum Erzwingen der Innodb-Recovery und sehen Sie, dass Sie den Start und die Wiederherstellung durch Angabe des Parameters innodb_force_recovery erzwingen können. Fügen Sie den folgenden Inhalt zu /etc/my.cnf hinzu:

innodb_force_recovery=6

Der Neustart war erfolgreich. Das Sichern über mysqldump ist kein Problem und auch das Einspielen der Backup-Daten auf andere Hosts funktioniert problemlos und lässt sich testen.

Das geht ganz einfach. Löschen Sie MySQL vollständig und installieren Sie Percona Server 5.7 neu. Erstellen Sie nach der Installation eine Datenbank, stellen Sie die Daten wieder her, verbinden Sie das Programm erneut und alles ist in Ordnung.

Zusammenfassen:

Aufgrund der Eigenschaften von MySQL-InnoDB-Datendateien können Sie bei Problemen, die dazu führen, dass das System nicht normal gestartet werden kann, zunächst die beiden Protokolldateien ./ib_logfile0 und ./ib_logfile1 verschieben und dann neu starten. Wenn dies fehlschlägt, können Sie die Wiederherstellung mit dem Parameter innodb_force_recovery erzwingen. Darüber hinaus ist das Protokoll auch sehr gut neu startbar. Wenn Sie Fragen haben, lesen Sie zuerst das Protokoll.

Das könnte Sie auch interessieren:
  • So zeigen Sie MySQL-Links an und löschen abnormale Links
  • Der Grund, warum MySQL die Binlog-Datei manuell registriert und Master-Slave-Anomalien verursacht
  • Zusammenfassung der Ausnahmen bei der MySQL-Datenbankverbindung (sammelwürdig)
  • So beheben Sie den abnormalen Start von mysql5.7.21
  • MySQL-Definition und Details zur Ausnahmebehandlung
  • Einige grundlegende Tutorials zur Ausnahmebehandlung in gespeicherten MySQL-Prozeduren
  • Analysieren eines abnormalen MySQL-Abfragefalls
  • Eine kurze Analyse der MySQL-Ausnahmebehandlung
  • Analysieren Sie mehrere gängige Lösungen für MySQL-Ausnahmen

<<:  Führen Sie die folgenden Schritte aus, um HugePages schnell unter Linux zu konfigurieren

>>:  So verwenden Sie SVG-Symbole in WeChat-Applets

Artikel empfehlen

Erläuterung von JavaScript-Mikrotasks und Makrotasks

Vorwort: js ist eine Single-Thread-Sprache, daher...

So beheben Sie das Timeout während des Pip-Vorgangs in Linux

So lösen Sie das Timeout-Problem, wenn Pip in Lin...

Der Vue.js-Cloud-Speicher realisiert die Bild-Upload-Funktion

Vorwort Tipp: Das Folgende ist der Hauptinhalt di...

Vue3.0 verwendet das Plug-In vue-grid-layout, um Drag-Layout zu implementieren

Inhaltsverzeichnis 1. Plugins 2. Zwischenspiel 3....

Probleme und Erfahrungen bei der Webentwicklung

<br />Nachfolgend sind die Probleme aufgefüh...

Einführung in den HTML-Standard für chinesische Zeichenkodierung

In HTML müssen Sie die von der Webseite verwendet...

Verbesserungen am Webserver zur Verbesserung der Website-Leistung

<br />Im ersten Abschnitt dieser Reihe haben...

Funktionsüberladung in TypeScript

Inhaltsverzeichnis 1. Funktionssignatur 2. Funkti...