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

  1. Schritt 1: MySQL Stoppen und Sicherung Erstellen

    Den MySQL-Dienst stoppen:

    sudo systemctl stop mysql

    Hinweis: Auf bestimmten Plattformen wie Rocky Linux kann der MySQL-Dienst stattdessen mysqld heiß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
  2. 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.

  3. 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       |
    +--------------------------+--------+----------+----------+
  4. 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 mysql

    Das integrierte Crash-Recovery-System von InnoDB löst in der Regel die meisten Probleme beim Neustart des Servers.

  5. 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 Datei mysqld.cnf, die sich in der Regel unter /etc/mysql auf Ubuntu- und Debian-Systemen oder /etc/my.cnf.d auf Red Hat- und Rocky-Systemen befindet:

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

    Fügen Sie im Abschnitt [mysqld] folgende Zeile hinzu:

    [mysqld]
    innodb_force_recovery=1

    Datei speichern und schließen, danach versuchen Sie den MySQL-Dienst neu zu starten.

  6. 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.sql

    Tabelle 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 TABLE bei 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=1 nicht, 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_recovery aus Ihrer Konfigurationsdatei nach der Wiederherstellung, um die normale Betriebstätigkeit wiederherzustellen.