Einführung
MySQL bietet verschiedene Möglichkeiten zum Analysieren und Reparieren von Datenbanken. Fehler und Anomalien treten aus zahlreichen Gründen auf, darunter einige:
- Ein MySQL-Update oder -Downgrade.
- Schnelle Änderungen in Indizes oder Daten.
- Tabelleninkonsistenzen.
Bei der Suche nach beschädigten Daten und der Reparatur von Tabellen hängen die Schritte zur Behebung der Fehler davon ab, wie Sie sich mit der Datenbank verbinden, vom Status des Datenbankservers, vom Fehlertyp und von der verwendeten Datenbank-Engine.
Dieser Artikel zeigt Ihnen mehrere Möglichkeiten zur Fehlerbehebung und Reparatur einer MySQL-Datenbank.
Voraussetzungen
- Terminal oder Befehlszeile mit Root-Rechten.
- MySQL-Version 8.0 installiert und konfiguriert.
- Eine beschädigte Datenbank oder Datenbanktabelle.
So überprüfen Sie die MySQL-Tabelle auf Fehler
Das Ausführen der Diagnose ist der erste Schritt zur Fehlerbehebung bei Problemen. Es gibt zwei Möglichkeiten, eine MySQL-Tabelle auf Fehler zu überprüfen:
- Durch eine MySQL
CHECK TABLE
Abfrage. - Mit dem Terminalprogramm
mysqlcheck
.
Überprüfen Sie eine Tabelle mit CHECK TABLE
Die CHECK TABLE
Die Abfrage funktioniert in MySQL, während der Dienst ausgeführt wird. Die allgemeine Verwendung ist:
CHECK TABLE <table name> [, table name, table name] [option] [option];
Die einfachste Verwendung ist eine Tabelle ohne Optionen:
CHECK TABLE <table name>;
Die Ausgabe der CHECK TABLE
Abfrage zeigt eine informative Tabelle über die Prüfergebnisse:
Die verfügbaren Optionen beim Prüfen von Tabellen sind:
FOR UPGRADE
- entdeckt Versionsinkonsistenzen. Beispielsweise unterstützt MySQL 8.0 keine zweistelligen Jahreszahlen, daher wird eine Tabelle mit solchen Werten für ein Upgrade markiert.QUICK
- Zeilen werden nicht auf falsche Verknüpfungen überprüft. Dies ist hilfreich, um Zeitüberschreitungen zu vermeiden.QUICK
- führt eine Prüfung auf Tabellen durch, die nicht richtig geschlossen sind.CHANGED
- prüft nur Tabellen mit Änderungen seit der letzten Prüfung oder die nicht richtig geschlossen wurden.MEDIUM
- prüft Tabellenzeilen auf Gültigkeit gelöschter Links und führt eine Prüfsumme für die Zeilen durch.EXTENDED
- prüft auf vollständige Konsistenz.
Ohne Optionen, CHECK TABLE
führt ein MEDIUM
durch Überprüfen Sie MyISAM-Tabellen und -Ansichten. Der FOR UPGRADE
und QUICK
Überprüfungen von InnoDB-Engine-Tabellen und -Ansichten durchführen, während andere Optionen ignoriert werden.
Sie können die Optionen für eine detailliertere Prüfung auch kombinieren. Um beispielsweise schnell zu überprüfen, ob eine Tabelle angemessen geschlossen wurde, führen Sie Folgendes aus:
CHECK TABLE <table name> FAST QUICK;
Alle Optionen, die nicht auf die Tabellen zutreffen, werden ignoriert.
Überprüfen Sie eine Tabelle mit mysqlcheck
Der mysqlcheck
command ist die Befehlszeilenversion von CHECK TABLE
. Das Programm läuft im Terminal, während der MySQL-Dienst in Betrieb ist. So führen Sie die Prüfung durch:
1. Navigieren Sie als Root-Benutzer zu dem Verzeichnis, in dem die Datenbanken gespeichert sind:
sudo su
cd /var/lib/mysql
2. Überprüfen Sie die gesamte Datenbank mit:
mysqlcheck <database name>
Alternativ können Sie eine bestimmte Tabelle in der Datenbank überprüfen, indem Sie auch den Tabellennamen angeben:
mysqlcheck <database name> <table name>
So reparieren Sie eine MySQL-Datenbank
Es gibt mehrere Methoden, um eine Datenbank in MySQL zu reparieren. Beachten Sie jedoch, dass diese Methoden keine schnelle Lösung sind und zu Datenverlust führen können. Wenn die Datenbanktabellen häufig beschädigt sind, ermitteln Sie den Grund für das Auftreten.
Bevor Sie Änderungen vornehmen und mit Reparaturen beginnen, erstellen Sie eine Kopie des Verzeichnisses:
cp -rfv /var/lib/mysql /var/lib/mysql_copy
Erstellen Sie alternativ eine Sicherungsversion der Datenbank, bevor Sie eine der Reparaturlösungen ausprobieren. Befolgen Sie unsere Anleitung:Wie man eine MySQL-Datenbank sichert und wiederherstellt.
Nachfolgend finden Sie drei Möglichkeiten, wie Sie eine MySQL-Datenbank reparieren können.
MySQL-Datenbank mit REPAIR TABLE-Abfrage reparieren
Nachdem Sie die Datenbank und die Tabellen mit Problemen gescannt und gefunden haben, können Sie das Problem am schnellsten mit REPAIR TABLE
beheben Abfrage:
Wenn der Server während der Reparatur heruntergefahren wird, führen Sie REPAIR TABLE
erneut aus Betrieb, wenn der Server neu gestartet wird. Stellen Sie sicher, dass Sie dies tun, bevor Sie andere Operationen an derselben Tabelle ausführen. Unter normalen Bedingungen führt eine MyISAM-Tabelle bei der Verwendung dieser Methode nicht zu Datenverlust.
Reparieren der MySQL-Datenbank mit mysqlcheck
Der mysqlcheck Befehl ist eine Alternative zum Reparieren von Datenbanktabellen im Terminal.
1. Navigieren Sie zunächst als Root-Benutzer zum MySQL-Datenbankordner:
cd /var/lib/mysql
2. Fügen Sie -r
hinzu Option zum mysqlcheck
Befehl zum Reparieren der Datenbanktabelle:
mysqlcheck -r <database> <table name>
Der mysqlcheck -r
Befehl ist die Terminalversion der REPAIR TABLE
Abfrage.
MySQL-Datenbank mit ALTER TABLE reparieren
Verwenden Sie ALTER TABLE
Abfrage, um die Tabelle mit derselben Speicher-Engine neu zu erstellen. Wenn Sie beispielsweise eine InnoDB-Tabelle haben, führen Sie Folgendes aus:
ALTER TABLE <table name> ENGINE = InnoDB;
Um eine MyISAM-Tabelle neu aufzubauen, verwenden Sie:
ALTER TABLE <table name> ENGINE = MyISAM;
Wenn Sie sich nicht sicher sind, welche Speicher-Engine die Tabelle verwendet, führen Sie die folgende Abfrage aus, um dies herauszufinden:
SHOW CREATE TABLE <table name>;
Engine-spezifische Diagnosen und Reparaturen an der MySQL-Datenbank ausführen
Abhängig von der verwendeten Datenbank-Engine bietet MySQL Engine-spezifische Ansätze zum Analysieren und Reparieren einer Datenbanktabelle.
MyISAM-Tabellen sind anfällig für Beschädigungen. Meistens sind die Fehler jedoch leicht zu beheben.
Beim Arbeiten mit InnoDB-Datenbanken treten Beschädigungen auf, wenn die Prüfsummenwerte nicht übereinstimmen. Fehler treten normalerweise aufgrund eines Stromausfalls oder eines anderen Hardwareproblems auf.
Überprüfen und Reparieren von MyISAM-Tabellen mit myisamchk
MySQL bietet einen speziellen Checker für MyISAM-Tabellen.
1. Fahren Sie den MySQL-Server herunter. Öffnen Sie das Terminal und führen Sie Folgendes aus:
systemctl mysql stop
2. Navigieren Sie als Root-Benutzer zum Speicherort der Datenbank:
cd /var/lib/mysql/<database name>
3. Um eine bestimmte Tabelle zu überprüfen, führen Sie Folgendes aus:
myisamchk <table name>
4. Reparieren Sie eine Tabelle, indem Sie Folgendes ausführen:
myisamchk --recover <table name>
5. Starten Sie den MySQL-Server neu:
systemctl restart mysql
6. Überprüfen Sie abschließend die Tabelle in MySQL nach der Wiederherstellung:
sudo mysql -u <user> -p <password>
USE <database name>;
SELECT * FROM <table name> LIMIT 4;
Ausführen des InnoDB-Wiederherstellungsprozesses
Die MySQL-Dokumentation schlägt vor, den InnoDB-Wiederherstellungsprozess für InnoDB-Datenbanken auszuführen.
1. Suchen und öffnen Sie die globale Konfigurationsdatei mit Ihrem bevorzugten Texteditor. Für Ubuntu- und Debian-Systeme lautet der Speicherort:
cd /etc/mysql/my.cnf
2. Fügen Sie die folgende Option zu my.cnf hinzu Datei:
[mysqld]
innodb_force_recovery=4
Standardmäßig ist die erzwungene Wiederherstellungsoption auf 0 (aus) eingestellt und geht bis 6. Jede neue Stufe enthält die Wiederherstellungsfunktionen der niedrigeren Nummern.
3. Speichern und schließen Sie die Datei.
4. Starten Sie den MySQL-Server neu, um sicherzustellen, dass die neue Konfigurationsdatei angewendet wird:
systemctl restart mysql
5. Exportieren Sie im Home-Ordner alle Datenbanken mit mysqldump
in eine Sicherungsdatei Befehl:
sudo mysqldump --all-databases --add-drop-database --add-drop-table --routines > <file name>.sql
6. Starten Sie den MySQL-Client und löschen Sie alle betroffenen Datenbanktabellen. Um eine Datenbanktabelle zu löschen, versuchen Sie:
DROP TABLE IF EXISTS <table name>;
Wenn die Tabelle nicht gelöscht wird, versuchen Sie, die Datenbanktabelle manuell zu entfernen. Melden Sie sich als Root-Benutzer an und navigieren Sie zu dem Verzeichnis, in dem sich die Datenbanken befinden:
sudo su
cd /var/lib/mysql/<database name>
Entfernen Sie die Datenbanktabelle:
rm -r <table name>
7. Stoppen Sie den MySQL-Server:
systemctl stop mysql
8. In der my.cnf kommentieren Sie innodb_force_recovery
aus Option in Schritt 2 hinzugefügt, um den Wiederherstellungsmodus zu deaktivieren. Speichern Sie dann die Datei und schließen Sie sie.
9. Starten Sie den MySQL-Server erneut:
systemctl start mysql
10. Stellen Sie die Datenbank aus der Sicherung .sql wieder her Datei in der MySQL-Shell. Melden Sie sich beim MySQL-Client an:
sudo mysql -u <username> -p <password>
11. Führen Sie die folgende Abfrage aus, um die Datenbanken zu importieren:
USE <database name>;
# Turning off auto commit is optional and speeds things up for larger databases
SET autocommit=0;
SOURCE <file name>.sql;
12. Testen Sie zuletzt die Datenbank, um sicherzustellen, dass alles richtig funktioniert. Wenn nicht, stellen Sie die Datenbank aus der Sicherung wieder her und versuchen Sie es mit einer anderen Methode.