Wie kann ich eine MySQL-Tabelle reparieren, wenn sie beschädigt ist?
- Ursachen für eine beschädigte MySQL-Tabelle
- Vorbereitung zur Reparatur
- Reparatur mit dem SQL-Befehl REPAIR TABLE
- Alternativen bei InnoDB-Tabellen
- Reparaturtools auf Betriebssystem-Ebene
- Fazit
Ursachen für eine beschädigte MySQL-Tabelle
Eine MySQL-Tabelle kann aus verschiedenen Gründen beschädigt werden, beispielsweise durch einen unerwarteten Serverabsturz, Hardwarefehler, Stromausfall während eines Schreibvorgangs oder durch Fehler im Dateisystem. Besonders bei MyISAM-Tabellen ist die Gefahr einer Beschädigung höher, da diese Speicher-Engine anfälliger für Inkonsistenzen nach plötzlichen Unterbrechungen ist. Aber auch bei InnoDB-Tabellen kann es zu Problemen kommen, vor allem wenn die Transaktionslogs beschädigt sind.
Vorbereitung zur Reparatur
Bevor Sie mit der Reparatur beginnen, sollten Sie unbedingt eine Sicherungskopie (Backup) Ihrer Datenbank erstellen. Das geht meist ganz einfach mit dem Tool mysqldump. Ein Backup schützt Sie davor, dass bei der Reparatur weitere Daten verloren gehen. Außerdem empfiehlt es sich, die MySQL-Server-Logdateien auf Fehlermeldungen zu prüfen, um die genaue Ursache herauszufinden.
Reparatur mit dem SQL-Befehl REPAIR TABLE
Für MyISAM-Tabellen bietet MySQL den Befehl REPAIR TABLE an, um beschädigte Tabellen zu reparieren. Dazu melden Sie sich auf der MySQL-Konsole an und führen beispielsweise aus:
REPAIR TABLE tabellenname;Dieser Befehl versucht, die fehlerhafte Tabelle zu prüfen und zu reparieren. Es gibt auch die Option EXTENDED, die eine gründlichere Reparatur durchführt, allerdings kann dies länger dauern:
REPAIR TABLE tabellenname EXTENDED;Nach der Ausführung erhalten Sie eine Statusmeldung, ob die Reparatur erfolgreich war oder nicht.
Alternativen bei InnoDB-Tabellen
Für InnoDB-Tabellen ist der Befehl REPAIR TABLE nicht wirksam, da InnoDB intern anders arbeitet und das Crash-Recovery normalerweise automatisch übernimmt. Sollte eine InnoDB-Tabelle defekt sein, können Sie versuchen, den MySQL-Server mit dem Parameter innodb_force_recovery zu starten, um die Datenbank in einen Read-Only-Modus zu versetzen und dadurch wenigstens die Daten zu exportieren.
Dazu bearbeiten Sie die my.cnf (unter Linux) oder my.ini (unter Windows) und fügen beispielsweise hinzu:
innodb_force_recovery=1Sie können den Wert von 1 bis 6 erhöhen, wobei 1 schon die leichteste Reparatur-Option ist. Nach dem Start des Servers versuchen Sie, die Tabelle mit mysqldump zu sichern und im Idealfall neu zu importieren. Danach muss der Parameter wieder entfernt und der Server neu gestartet werden.
Reparaturtools auf Betriebssystem-Ebene
Neben den MySQL-internen Befehlen gibt es auch Betriebssystem-Tools, die für MyISAM-Tabellen hilfreich sein können. Die MyISAM-Tabellen bestehen aus drei Dateien mit Endungen .frm, .MYD und .MYI. Die wichtigsten Reparatur-Tools sind myisamchk und myisampack.
Um eine Tabelle zu reparieren, stoppen Sie am besten den MySQL-Server und führen dann auf dem Datenbankordner (z. B. /var/lib/mysql/datenbankname) aus:
myisamchk -r tabellenname.MYIDer Befehl -r steht für Repair. Für eine gründlichere Reparatur bietet sich der Parameter -o (Optimize) oder --safe-recover an. Wichtig ist, dass die entsprechenden Dateien nicht vom MySQL-Server benutzt werden dürfen, deshalb muss der Server gestoppt sein oder die Tabellen deaktiviert (z.B. im Read-Only-Modus).
Fazit
Das Reparieren einer beschädigten MySQL-Tabelle erfordert zuerst eine Diagnose, welche Engine verwendet wird (MyISAM oder InnoDB) und wie stark die Beschädigung ist. Für MyISAM-Tabellen sind die Befehle REPAIR TABLE und das Tool myisamchk die ersten Schritte. Für InnoDB-Tabellen sollten Sie auf Crash-Recovery setzen und im Notfall den Server mit innodb_force_recovery starten, um Daten zu retten. Eine zuverlässige Sicherung ist vor jedem Reparaturversuch essenziell, um Datenverlust zu vermeiden.
