Dieser Abschnitt beschreibt, wie MySQL mit Fehlern umgeht, die aufgrund einer vollen Festplatte auftreten (wie beispielsweise „no space left on device“), und wie Fehler aufgrund von Kontingentüberschreitung behandelt werden (wie zum Beispiel „write failed“ oder „user block limit reached“).
Dieser Abschnitt ist für Schreiboperationen auf
MyISAM
-Tabellen relevant. Er gilt jedoch auch
für Schreiboperationen in Binärlogdateien und die
Binärlog-Indexdatei, nur dass die Begriffe „row“
und „record“ im Zusammenhang mit Logs
„Ereignisse“ bedeuten.
Wenn ein Fehler wegen voller Festplatte auftritt, geht MySQL wie folgt vor:
Es prüft einmal pro Minute, ob genug Platz vorhanden ist, um die aktuelle Zeile zu schreiben. Wenn dies der Fall ist, macht es weiter, als sei nichts geschehen.
Alle 10 Minuten schreibt es in die Logdatei eine Warnung, dass die Festplatte voll ist.
Dieses Problem können Sie folgendermaßen beheben:
Um weiterarbeiten zu können, müssen Sie lediglich genug Platz auf der Platte schaffen, um alle Datensätze zu schreiben.
Um den Thread anzuhalten, sagen Sie mysqladmin kill. Dann wird der Thread das nächste Mal, wenn er die Platte überprüft (also in einer Minute), gestoppt.
Eventuell warten andere Threads auf die Tabelle, welche die
Fehlerbedingung disk-full
verursacht hat.
Wenn Sie mehrere „gesperrte“ Threads haben,
können nach Abbruch des einen Threads, der wegen der
disk-full
-Bedingung wartet, die anderen
Threads weiterlaufen.
Das oben geschilderte Verhalten tritt nicht ein, wenn Sie
REPAIR TABLE
oder OPTIMIZE
TABLE
gesagt haben oder wenn die Indizes nach
LOAD DATA INFILE
oder nach einer
ALTER TABLE
-Anweisung in Stapelverarbeitung
erstellt werden. Alle diese Anweisungen können große
temporäre Dateien erzeugen, die den Rest des Systems in
Schwierigkeiten bringen, wenn sie sich selbst überlassen
bleiben. Wenn die Platte voll läuft, während MySQL eine dieser
Operationen ausführt, löscht MySQL eine der großen
temporären Dateien und kennzeichnet die Tabelle als
abgestürzt. Ausnahme: Bei ALTER TABLE
bleibt
die alte Tabelle unverändert.
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.