MySQL-Tabellen können korrupt werden, was zu unlesbaren Daten und möglichen Serverabstürzen führt. Diese Anleitung führt Sie durch die Diagnose und Reparatur korrupter Tabellen in den Speicher-Engines MyISAM und InnoDB unter Verwendung integrierter MySQL-Werkzeuge und Wiederherstellungsmethoden.
Hintergrund
Gängige Ursachen für Tabellenkorruption sind:
- Unterbrechung des MySQL-Servers während eines Schreibvorgangs
- Konkurrente Änderungen einer Tabelle durch ein externes Programm und den Server
- Unerwarteter Heruntergang des Computers
- Hardwareausfälle im Computer
- Softwarefehler innerhalb des MySQL-Codes
Vor dem Start jeglicher Fehlersuche oder -behebung ist es unerlässlich, eine Sicherung Ihres Datenverzeichnisses zu erstellen, um den Datenverlustrisiko zu minimieren.
Wie Man Korrupte Tabellen Behebt
-
Schritt 1: MySQL Stoppen und Sicherung Erstellen
Den MySQL-Dienst stoppen:
sudo systemctl stop mysqlHinweis: Auf bestimmten Plattformen wie Rocky Linux kann der MySQL-Dienst stattdessen
mysqldheißen.Alle Ihre Daten in ein neues Sicherungsverzeichnis kopieren. Für Ubuntu-Systeme befindet sich das Standarddataverzeichnis typischerweise unter
/var/lib/mysql/:cp -r /var/lib/mysql /var/lib/mysql_bkp -
Schritt 2: Überprüfen, Ob Die Tabelle Korrupt Ist (MyISAM)
Falls die Tabelle das Speicher-Engine MyISAM verwendet, können Sie ihren Status durch Ausführen eines
CHECK TABLE-Befehls vom MySQL-Prompt bestimmen:mysql> CHECK TABLE table_name;Die Ausgabe enthält eine Nachricht, die angibt, ob die Tabelle korrupt ist.
-
Schritt 3: MyISAM-Tabellen Reparieren
Falls die Tabelle als korrupt bestätigt wurde, versuchen Sie eine Reparatur:
mysql> REPAIR TABLE table_name;Nach einer erfolgreichen Reparatur sollte die Ausgabe eine Nachricht enthalten, die den Abschluss des Reparaturprozesses bestätigt. Zum Beispiel:
+--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ -
Schritt 4: InnoDB-Tabellen Mit Crash Recovery Behandeln
Falls die korrupte Tabelle das Speicher-Engine InnoDB (Standard ab MySQL 8.0) verwendet, unterscheidet sich der Reparaturprozess. InnoDB verfügt über integrierte Korruptionsprüfungen und -reparaturen, indem es Prüfsummen für jede gelesene Seite berechnet.
Versuchen Sie den MySQL-Dienst neu zu starten, um die Zugänglichkeit des Servers wiederherzustellen:
sudo systemctl restart mysqlDas integrierte Crash-Recovery-System von InnoDB löst in der Regel die meisten Probleme beim Neustart des Servers.
-
Schritt 5: InnoDB Force Recovery Aktivieren (falls erforderlich)
Falls der Server weiterhin abgestürzt oder unzugänglich ist, aktivieren Sie die
force_recovery-Option von InnoDB. Bearbeiten Sie die Dateimysqld.cnf, die sich in der Regel unter/etc/mysqlauf Ubuntu- und Debian-Systemen oder/etc/my.cnf.dauf Red Hat- und Rocky-Systemen befindet:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfFügen Sie im Abschnitt
[mysqld]folgende Zeile hinzu:[mysqld] innodb_force_recovery=1Datei speichern und schließen, danach versuchen Sie den MySQL-Dienst neu zu starten.
-
Schritt 6: InnoDB-Tabelle Dumpen Und Neu Laden
Falls der Zugang zur korrupten Tabelle erfolgreich ist, verwenden Sie das
mysqldump-Hilfsprogramm, um Ihre Tabellendaten in eine neue Datei zu exportieren:mysqldump database_name table_name > out.sqlTabelle aus der Datenbank löschen:
mysql -u user -p --execute="DROP TABLE database_name.table_name"Tabelle mit der erstellten Dump-Datei wiederherstellen:
mysql -u user -p < out.sql
Häufige Probleme
- Falls
REPAIR TABLEbei MyISAM-Tabellen fehlschlägt, könnte die Korruption schwerwiegend sein. Überlegen Sie eine Wiederherstellung aus Ihrer Sicherung. - Für InnoDB-Tabellen funktioniert
innodb_force_recovery=1nicht, können Sie den Wert bis 6 erhöhen, höhere Werte können jedoch Schreiboperationen verhindern. - Löschen Sie immer die Zeile
innodb_force_recoveryaus Ihrer Konfigurationsdatei nach der Wiederherstellung, um die normale Betriebstätigkeit wiederherzustellen.