MySQL ist eines der beliebtesten Open-Source-RDBMS (relationalen Datenbankmanagementsysteme). Es ist ein integraler Bestandteil des schnell wachsenden LAMP-Stacks und hat eine beeindruckende Fangemeinde unter Entwicklern und Systemadministratoren gewonnen. Im Vergleich zu nicht-relationalen Datenbanken, bietet SQL hervorragende Funktionen zur effektiven Anordnung, Speicherung und Verwaltung von Daten. Die herausragenden Funktionen zur Tabellenanordnung und die besonderen Fähigkeiten der SQL-Datenbank machen sie zu einer bevorzugten Wahl auf allen Ebenen des Unternehmens, sowohl in großen als auch in kleinen.
MySQL-Tabellen können in seltenen Fällen beschädigt werden, was darauf hindeutet, dass ein solcher Fehler aufgetreten ist und die darin gespeicherten Daten unlesbar sind. Wenn Sie versuchen, Daten aus einer beschädigten Tabelle zu lesen, stürzt der Server ab und gibt einen Fehler oder eine Liste von Fehlern aus.
Potenzielle Gründe für die Beschädigung von MySQL-Tabellen
Im Folgenden sind einige der typischsten Gründe für beschädigte Tabellen aufgeführt:
- Der MySQL-Dienst stürzt nach dem Neustart ab.
- Das Gerät schaltet sich aufgrund eines Stromausfalls unerwartet aus.
- Fehlerhafter Arbeitsspeicher oder Hardwarefehler.
- Softwarefehler im Betriebssystem oder im SQL-Code.
- MySQL wird während des Schreibvorgangs heruntergefahren.
- Das System schaltet sich AUS, während SQL aktualisiert wird.
Bevor Sie eine Tabelle reparieren, von der Sie vermuten, dass sie beschädigt ist, erstellen Sie ein Backup Ihres Datenverzeichnisses. Dies hilft, die Wahrscheinlichkeit eines Datenverlusts zu verringern. In dieser Kurzanleitung führen wir Sie durch die Schritte zur Fehlerbehebung bei der Reparatur beschädigter Tabellen in MySQL.
Voraussetzungen
Um diesem Tutorial folgen zu können, benötigen Sie Folgendes:
- Die neueste Version von Ubuntu installiert auf Ihrem System.
- Systembenutzer müssen über sudo-Rechte verfügen.
- Wenn Sie Schwierigkeiten beim Zugriff auf Ihr sudo-Konto haben, sollten Sie das MySQL-Root-Passwort ändern.
- MySQL eingerichtet auf Ihrem Server.
Schritt 1: MySQL-Dienst stoppen und Datensicherung
Stoppen Sie zunächst den MySQL-Dienst mit dem Befehl systemctl:
|
1 |
sudo systemctl stop mysql |
Nach dem Stoppen des SQL-Dienstes besteht der nächste Schritt darin, Backups aller vorhandenen Dateien in einem neuen Verzeichnis zu erstellen. Verwenden Sie das Standard-Datenverzeichnis von Ubuntu /var/lib/mysql/, um alle Systemdaten zu kopieren:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
Schritt 2: Identifizieren Sie den Fehler
Als Nächstes beginnen wir mit unserer Untersuchung und identifizieren die beschädigte Tabelle. Wenn die Tabelle die MyISAM-Speicher-Engine verwendet, nutzen Sie die Anweisung CHECK TABLE und überprüfen Sie den Status der Tabelle:
|
1 |
mysql> CHECK TABLE table_name; |
Als Ausgabe sehen Sie eine Meldung, die die beschädigte Tabelle oder die beschädigten Tabellen bestätigt.
Schritt 3: Reparieren Sie die beschädigte Tabelle
Wenn ein Fehler in der MyISAM-Tabelle vorliegt und Sie diesen identifiziert haben, verwenden Sie die Anweisung REPAIR TABLE, um den Fehler zu beheben:
|
1 |
mysql> REPAIR TABLE table_name; |
Wenn die Reparatur erfolgreich war, sollten Sie die folgende fehlerfreie Meldung als Ausgabe sehen:
|
1 2 3 4 5 6 7 8 9 10 11 |
Ausgabe: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
Wenn der Fehler jedoch erneut auftritt, folgen Sie dem offiziellen Dokument für MySQL-Version 8.0, um Tabellen neu zu erstellen oder zu reparieren.
Im Gegensatz zur MyISAM-Speicher-Engine unterscheidet sich der InnoDB-Prozess zur Reparatur von Tabellen in der InnoDB-Speicher-Engine. InnoDB ist die Standard-Speicher-Engine in MySQL 8.0. Sie verfügt über automatische Mechanismen zur Überprüfung auf Beschädigungen und Reparaturvorgänge. Die MySQL InnoDB prüft auf beschädigte Seiten, indem sie für jede gelesene Seite Prüfsummen berechnet. Wenn eine Diskrepanz festgestellt wird, stoppt sie automatisch den MySQL-Server.
Fazit ist, dass InnoDB-Tabellen nur selten repariert werden müssen. InnoDB verfügt über einen Crash-Recovery-Mechanismus, der die meisten Probleme durch einen Neustart beheben kann.
Versuchen Sie, den MySQL-Dienst neu zu starten, um zu sehen, ob Sie Zugriff auf den Server erhalten:
|
1 |
sudo systemctl restart mysql |
Wenn es Ihnen selbst nach dem Neustart nicht gelingt, eine beschädigte InnoDB-Tabelle neu zu erstellen, versuchen Sie die „Dump and Reload“-Methode, die in der MySQL-Dokumentation vorgeschlagen wird. Diese Methode beinhaltet die Wiedererlangung des Zugriffs auf die beschädigte Tabelle unter Verwendung des mysqldump-Dienstprogramms. Es muss ein Ordner erstellt werden, um das logische Backup der Tabelle zu speichern und aufzubewahren. Sobald der Fehler behoben ist, wird die Tabelle wieder in die Datenbank geladen.
Schritt 4: Nutzen Sie die Option innodb_force_recovery
Wenn der Server abgestürzt oder unerreichbar bleibt, versuchen Sie, die Option force_recovery in InnoDB zu verwenden. Das Aktivieren (ON) der force_recovery-Option ist eine hervorragende Möglichkeit, MySQL-Datenbanken wiederherzustellen. Sie können diese Option aktivieren, indem Sie die Datei mysqld.cnf im Texteditor nano bearbeiten:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Fügen Sie die folgende Zeile unter dem Abschnitt [mysqld] ein:

Speichern und schließen Sie die Datei nach dem Neustart des MySQL-Dienstes.
Schritt 5: Erstellen Sie eine mysqldump-Datei
Wenn Sie auf die beschädigte Tabelle zugreifen können, verwenden Sie die Option mysqldump, um alle Dumps in der neuen Datei abzulegen. Benennen Sie die neue Datei nach Ihren Wünschen und achten Sie darauf, die Endung .sql am Ende hinzuzufügen. Hier nennen wir die Datei demo.sql:
|
1 |
mysqldump database_name table_name > demo.sql |
Verwenden Sie danach die Abfrage DROP TABLE, um die Tabelle aus der Datenbank zu entfernen. Sie können die folgende Syntax verwenden, um zu vermeiden, dass Sie die MySQL-Eingabeaufforderung erneut öffnen müssen:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
Stellen Sie dann die Tabelle mithilfe des soeben erstellten Dump-Dokuments demo.sql wieder her:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
Sie haben Ihre beschädigte MySQL-Tabelle erfolgreich repariert und können nun nahtlos mit der Datenbank arbeiten.
Fazit
Tabellenbeschädigungen oder unerwartete Systemabstürze treten wahrscheinlich auf, wenn Sie mit einer großen Datenmenge arbeiten. Es ist erwähnenswert, dass die MySQL InnoDB-Speicher-Engine fehlertoleranter ist als die vorherige MyISAM-Engine. Tabellen, die die InnoDB-Speicher-Engine verwenden, können zwar immer noch beschädigt werden, obwohl die Gefahr von Tabellenbeschädigungen und Ausfällen dank ihrer automatischen Wiederherstellungsfunktionen erheblich reduziert ist.
Schließlich gibt es viele Themen und Tutorials zu Datenbanken, die Sie in unserem Blog:
- So installieren Sie MySQL auf CentOS 7
- MySQL-Benutzer — Erstellen und Berechtigungen erteilen
- Einrichten der Replikation in MySQL auf Ubuntu
Happy Computing!
Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.