Dieser Abschnitt beschreibt, wie Sie MySQL-Datenbanken auf beschädigte Daten überprüfen und mit diesen ggf. verfahren können. Wenn Ihre Tabellen häufig beschädigt werden, sollten Sie die Ursache hierfür ermitteln. Siehe auch Abschnitt A.4.2, „Was zu tun ist, wenn MySQL andauernd abstürzt“.
Eine Erklärung, wie Schäden an
MyISAM
-Tabellen auftreten können, finden
Sie in Abschnitt 14.1.4, „MyISAM-Tabellenprobleme“.
Wenn Sie mysqld mit deaktivierter externer Sperre ausführen (was ab MySQL 4.0 das Standardverhalten ist), dann können Sie myisamchk nicht für das zuverlässige Überprüfen einer Tabelle verwenden, wenn mysqld genau diese Tabelle benutzt. Wenn Sie ganz sicher sind, dass niemand über mysqld auf die Tabellen zugreifen kann, während Sie myisamchk ausführen, müssen Sie lediglich mysqladmin flush-tables ausführen, bevor Sie die Überprüfung der Tabellen starten. Können Sie dies nicht gewährleisten, dann müssen Sie mysqld stoppen, solange Sie die Tabellen überprüfen. Führen Sie myisamchk zur Überprüfung von Tabellen aus, die gleichzeitig von mysqld aktualisiert werden, dann erhalten Sie unter Umständen eine Warnung, dass eine Tabelle beschädigt sei, obwohl dies gar nicht stimmt.
Wenn der Server mit aktivierter externer Sperrung ausgeführt wird, können Sie die Tabellen jederzeit mit myisamchk überprüfen. In diesem Fall muss der Server, wenn er eine Tabelle zu aktualisieren versucht, die myisamchk gerade verwendet, warten, bis myisamchk den Vorgang abgeschlossen hat, bevor er fortfährt.
Verwenden Sie myisamchk zur Reparatur oder Optimierung von Tabellen, dann müssen Sie immer sicherstellen, dass der Server mysqld die Tabelle nicht verwendet. (Dies gilt auch bei deaktivierter externer Sperrung.) Beenden Sie mysqld nicht, dann sollten Sie zumindest mysqladmin flush-tables ausführen, bevor Sie myisamchk starten. Wenn der Server und myisamchk gleichzeitig auf die Tabellen zugreifen, können Ihre Tabellen beschädigt werden.
Wenn Sie eine Wiederherstellung nach einem Absturz
durchführen, müssen Sie beachten, dass zu jeder
MyISAM
-Tabelle
tbl_name
in einer Datenbank drei
Dateien im Datenbankverzeichnis gehören:
Datei | Zweck |
|
Definitionsdatei (Formatdatei) |
|
Datendatei |
|
Indexdatei |
Jeder dieser drei Dateitypen kann auf unterschiedliche Weise beschädigt werden, meistens treten Probleme aber in Zusammenhang mit Daten- und Indexdateien auf.
myisamchk erstellt datensatzweise eine
Kopie der .MYD
-Datendatei. Die Reparatur
wird beendet, indem die alte .MYD
-Datei
entfernt und der neuen Daten dann der ursprüngliche Dateiname
zugewiesen wird. Wenn Sie --quick
verwenden,
erstellt myisamchk keine temporäre
.MYD
-Datei, sondern setzt stattdessen
voraus, dass die .MYD
-Datei korrekt ist,
und erstellt nur eine neue Indexdatei – die vorhandene
.MYD
-Datei wird nicht angerührt. Dies
ist sicher, da myisamchk automatisch
erkennt, ob die .MYD
-Datei beschädigt
ist (in diesem Fall wird diese Reparatur abgebrochen). Sie
können für myisamchk auch zweimal die
Option --quick
angeben. In diesem Fall bricht
myisamchk bei einigen Fehlern (z. B.
Schlüsseldubletten) nicht ab, sondern versucht diese zu
beheben, indem die .MYD
-Datei modifiziert
wird. Normalerweise ist die Verwendung zweier
--quick
-Optionen nur dann sinnvoll, wenn zu
wenig freier Festplattenspeicher für eine normale Reparatur
vorhanden ist. In diesem Fall sollten Sie zumindest ein Backup
der Tabelle erstellen, bevor Sie myisamchk
ausführen.
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.