Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So reparieren Sie MySQL-Datenbanken und -Tabellen

Dieser Artikel beschreibt, wie Sie MySQL-Tabellen und -Datenbanken reparieren. Wenn die Tabellen einer Datenbank wachsen, können von Zeit zu Zeit Fehler auftreten. Wenn dies der Fall ist, enthält MySQL mehrere Tools, mit denen Sie Datenbanktabellen überprüfen und reparieren können. Befolgen Sie dazu die nachstehenden Verfahren in der Reihenfolge, in der sie angezeigt werden.

Dieser Artikel gilt nur für Produkte, die in den Artikeldetails aufgeführt sind Seitenleiste. Sie müssen über Root-Zugriff auf den Server verfügen, um diese Verfahren ausführen zu können.

Schritt 1:Sichern der Datenbanken

Bevor Sie versuchen, eine Datenbank zu reparieren, sollten Sie sie zuerst sichern. Führen Sie die folgenden Schritte aus, um alle Dateien aus all Ihren Datenbanken zu sichern:

  1. Melden Sie sich mit SSH bei Ihrem Server an.
  2. Stoppen Sie den MySQL-Server mit dem entsprechenden Befehl für Ihre Linux-Distribution:
    • Geben Sie für CentOS und Fedora Folgendes ein:
      service mysqld stop
    • Geben Sie für Debian und Ubuntu Folgendes ein:

      service mysql stop
  3. Geben Sie den folgenden Befehl ein:

    cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
    Dieser Befehl kopiert alle Dateien aus all Ihren Datenbanken in einen Verzeichnisnamen, der auf der aktuellen Zeit basiert (genauer gesagt, die Anzahl der seit dem 1. Januar 1970 verstrichenen Sekunden). Dadurch wird sichergestellt, dass jede Datenbanksicherung in einem Verzeichnis mit eindeutigem Namen gespeichert wird. Für zusätzlichen Schutz können (und sollten) Sie die Datenbankdateien an einem entfernten Ort sichern, der sich nicht auf dem Server befindet.
  4. Starten Sie den MySQL-Server mit dem entsprechenden Befehl für Ihre Linux-Distribution neu:

    • Geben Sie für CentOS und Fedora Folgendes ein:
      service mysqld start
    • Geben Sie für Debian und Ubuntu Folgendes ein:

      service mysql start

Schritt 2:Ausführen von mysqlcheck

Nachdem Sie Ihre Datenbanken gesichert haben, können Sie mit der Fehlerbehebung beginnen. Der mysqlcheck Mit dem Programm können Sie Datenbanken prüfen und reparieren, während MySQL läuft. Diese Funktion ist nützlich, wenn Sie an einer Datenbank arbeiten möchten, ohne den gesamten MySQL-Dienst zu stoppen.

Zusätzlich mysqlcheck funktioniert mit Tabellen, die die Datenbank-Engines MyISAM oder InnoDB verwenden.

Informationen dazu, wie Sie feststellen können, welche Speicher-Engine eine Datenbanktabelle verwendet, finden Sie in diesem Artikel.

Um mysqlcheck zu verwenden , gehen Sie folgendermaßen vor:

  1. Geben Sie als Root-Benutzer den folgenden Befehl ein:
    cd /var/lib/mysql
  2. Geben Sie den folgenden Befehl ein und ersetzen Sie database durch den Namen der Datenbank, die Sie überprüfen möchten:

    mysqlcheck database

    Der vorherige Befehl überprüft alle Tabellen in der angegebenen Datenbank. Geben Sie alternativ den folgenden Befehl ein, um eine bestimmte Tabelle in einer Datenbank zu überprüfen. Ersetzen Sie Datenbank durch den Namen der Datenbank und Tabelle durch den Namen der Tabelle, die Sie überprüfen möchten:

    mysqlcheck database table
  3. Mysqlcheck prüft die angegebene Datenbank und Tabellen. Wenn eine Tabelle die Prüfung besteht, mysqlcheck zeigt OK an für den Tisch. Wenn jedoch mysqlcheck einen Fehler für eine Tabelle meldet, geben Sie den folgenden Befehl ein, um zu versuchen, sie zu reparieren. Ersetzen Sie database durch den Datenbanknamen und table durch den Tabellennamen:

    mysqlcheck -r database table
  4. Wenn mysqlcheck die Tabelle oder Tabellen nicht erfolgreich reparieren können, fahren Sie mit dem folgenden Verfahren fort.

Schritt 3:Motorspezifische Diagnose ausführen

Wenn mysqlcheck ausgeführt wird das Problem nicht behebt, besteht der nächste Schritt darin, eine Diagnose speziell für die Engine auszuführen, die von der Datenbanktabelle oder den Datenbanktabellen verwendet wird. Befolgen Sie das entsprechende Verfahren unten für die Datenbankspeicher-Engine Ihrer Tabelle.

Informationen dazu, wie Sie feststellen können, welche Speicher-Engine Ihre Datenbanktabellen verwenden, finden Sie in diesem Artikel.
MyISAM-Tabellen mit myisamchk reparieren

Wenn Sie die MyISAM-Speicher-Engine für eine Tabelle verwenden, können Sie myisamchk ausführen Programm, um es zu reparieren. Gehen Sie dazu folgendermaßen vor:

Der myisamchk Das Programm funktioniert nur für Tabellen, die die MyISAM-Speicher-Engine verwenden. Es funktioniert nicht für die InnoDB-Engine.
  1. Stoppen Sie den MySQL-Server mit dem entsprechenden Befehl für Ihre Linux-Distribution:
    • Geben Sie für CentOS und Fedora Folgendes ein:
      service mysqld stop
    • Geben Sie für Debian und Ubuntu Folgendes ein:

      service mysql stop
  2. Geben Sie den folgenden Befehl ein:

    cd /var/lib/mysql
  3. Wechseln Sie in das Verzeichnis, in dem sich die Datenbank befindet. Zum Beispiel, wenn die Datenbank Kunden heißt , geben Sie cd Kunden ein.
  4. Geben Sie den folgenden Befehl ein und ersetzen Sie Tabelle durch den Namen der Tabelle, die Sie überprüfen möchten:

    myisamchk table

    Geben Sie den folgenden Befehl ein, um alle Tabellen in einer Datenbank zu überprüfen:

    myisamchk *.MYI

    Wenn der vorherige Befehl nicht funktioniert, können Sie versuchen, temporäre Dateien zu löschen, die myisamchk möglicherweise verhindern davon ab, richtig zu laufen. Wechseln Sie dazu zurück in die /var/lib/mysql Verzeichnis, und geben Sie dann den folgenden Befehl ein:

    ls */*.TMD
    

    Wenn .TMD-Dateien aufgelistet sind, geben Sie den folgenden Befehl ein, um sie zu löschen:

    rm */*.TMD

    Versuchen Sie dann, myisamchk auszuführen nochmal.

  5. Um zu versuchen, eine Tabelle zu reparieren, geben Sie den folgenden Befehl ein und ersetzen dabei table mit dem Namen der Tabelle, die Sie reparieren möchten:

    myisamchk --recover table
  6. Starten Sie den MySQL-Server mit dem entsprechenden Befehl für Ihre Linux-Distribution neu:

    • Geben Sie für CentOS und Fedora Folgendes ein:
      service mysqld start
    • Geben Sie für Debian und Ubuntu Folgendes ein:

      service mysql start
  7. Testen Sie die reparierte(n) Tabelle(n).
Ausführen des InnoDB-Wiederherstellungsprozesses

Wenn Sie die InnoDB-Speicher-Engine für eine Datenbanktabelle verwenden, können Sie den InnoDB-Wiederherstellungsprozess ausführen. Gehen Sie dazu folgendermaßen vor:

  1. Verwenden Sie Ihren bevorzugten Texteditor, um my.cnf zu öffnen Datei auf Ihrem Server. Der Speicherort von my.cnf Datei hängt von Ihrer Linux-Distribution ab:
    • Auf CentOS und Fedora die my.cnf Datei befindet sich im Verzeichnis /etc Verzeichnis.
    • Auf Debian und Ubuntu die my.cnf Datei befindet sich im Verzeichnis /etc/mysql Verzeichnis.
  2. In der my.cnf Suchen Sie die Datei [mysqld] Abschnitt.
  3. Fügen Sie die folgende Zeile zu [mysqld] hinzu Sektion:

    innodb_force_recovery=4
  4. Speichern Sie die Änderungen in my.cnf Datei und starten Sie dann den MySQL-Server mit dem entsprechenden Befehl für Ihre Linux-Distribution neu:

    • Geben Sie für CentOS und Fedora Folgendes ein:
      service mysqld restart
    • Geben Sie für Debian und Ubuntu Folgendes ein:

      service mysql restart
  5. Geben Sie den folgenden Befehl ein, um alle Datenbanken in databases.sql zu exportieren Datei:

    mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
  6. Starten Sie mysql Programm und versuchen Sie dann, die betroffene(n) Datenbank(en) mit DROP DATABASE zu löschen Befehl.

    Wenn MySQL eine Datenbank nicht löschen kann, können Sie sie in Schritt 8 unten manuell löschen, nachdem Sie den MySQL-Server gestoppt haben.
  7. Stoppen Sie den MySQL-Server mit dem entsprechenden Befehl für Ihre Linux-Distribution:

    • Geben Sie für CentOS und Fedora Folgendes ein:
      service mysqld stop
    • Geben Sie für Debian und Ubuntu Folgendes ein:

      service mysql stop
  8. Wenn Sie eine Datenbank in Schritt 6 nicht löschen konnten, geben Sie die folgenden Befehle ein, um sie manuell zu löschen. Ersetzen Sie database durch den Namen der Datenbank, die Sie löschen möchten:

    cd /var/lib/mysql
    rm -rf database
    Stellen Sie sicher, dass Sie mysql nicht löschen oder performance_schema Verzeichnisse!
  9. Verwenden Sie Ihren bevorzugten Texteditor, um my.cnf zu öffnen Datei auf Ihrem Server und kommentieren Sie dann die folgende Zeile in [mysqld] aus Abschnitt wie abgebildet:

    #innodb_force_recovery=4
    Dadurch wird der InnoDB-Wiederherstellungsmodus deaktiviert.
  10. Speichern Sie die Änderungen in my.cnf Datei und starten Sie dann den MySQL-Server mit dem entsprechenden Befehl für Ihre Linux-Distribution:

    • Geben Sie für CentOS und Fedora Folgendes ein:
      service mysqld start
    • Geben Sie für Debian und Ubuntu Folgendes ein:

      service mysql start
  11. Geben Sie den folgenden Befehl ein, um die Datenbanken aus der Sicherungsdatei wiederherzustellen, die Sie in Schritt 5 erstellt haben:

    mysql < databases.sql
  12. Testen Sie die wiederhergestellte Datenbank.

Weitere Informationen

  • Weitere Informationen zu mysqlcheck , besuchen Sie bitte https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
  • Weitere Informationen zu myisamchk , besuchen Sie bitte https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.