Obwohl das Tabellenformat MyISAM
sehr
zuverlässig ist (alle Änderungen, die eine SQL-Anweisung an
einer Tabelle vornimmt, werden geschrieben, ehe die Anweisung
zurückkehrt), können dennoch unter folgenden Umständen
Tabellen beschädigt werden:
Der mysqld-Prozess wird mitten in einem Schreibvorgang abgebrochen.
Der Computer wird unerwartet heruntergefahren (zum Beispiel ausgeschaltet).
Ein Hardware-Versagen.
Während eine Tabelle gerade vom Server modifiziert wird, ändern Sie dieselbe Tabelle mit einem externen Programm (zum Beispiel myisamchk).
Ein Software-Bug im Code von MySQL oder
MyISAM
.
Die folgenden Symptome sind typisch für eine beschädigte Tabelle:
Beim Auswählen von Daten aus der Tabelle bekommen Sie folgende Fehlermeldung:
Incorrect key file for table: '...'. Try to repair it
Anfragen können Zeilen in der Tabelle nicht finden oder liefern unvollständige Ergebnisse zurück.
Mit der CHECK TABLE
-Anweisung können Sie
die Integrität einer MyISAM
-Tabelle
überprüfen und mit REPAIR TABLE
können
Sie sie reparieren, wenn sie beschädigt ist. Wenn
mysqld nicht läuft, können Sie eine
Tabelle auch mit dem Befehlmyisamchk
prüfen oder reparieren Siehe hierzu auch
Abschnitt 13.5.2.3, „CHECK TABLE
“, Abschnitt 13.5.2.6, „REPAIR TABLE
“
und Abschnitt 8.2, „myisamchk — Hilfsprogramm für die Tabellenwartung von MyISAM“.
Werden Ihre Tabellen häufig beschädigt, so sollten Sie nach
den Ursachen forschen. Am wichtigsten ist es, festzustellen,
ob die Tabelle infolge eines Server-Absturzes beschädigt
wurde. Das können Sie leicht daran erkennen, dass im
Fehler-Log eine restarted mysqld
-Nachricht
jüngeren Datums gespeichert ist. Wenn ja, dann wurde die
Tabelle wahrscheinlich durch den Absturz des Servers
beschädigt. Andernfalls kann der Schaden auch im normalen
Betrieb aufgetreten sein. Das wäre dann ein Bug. Versuchen
Sie in diesem Fall, einen reproduzierbaren Testfall zu
erstellen, der das Problem demonstriert. Siehe auch
Abschnitt A.4.2, „Was zu tun ist, wenn MySQL andauernd abstürzt“ und
Abschnitt E.1.6, „Erzeugen eines Testfalls, wenn Sie Tabellenbeschädigung feststellen“.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.