Debian-Sarge AMD64 mit MySQL 5.0 Backport Problem

Heute (Nacht) machte ein merkwürdiges Problem auf einem Kundenserver einige Recherche notwendig. Der MySQL-Server (5.0.24a-Debian) verweigerte sporadisch aber vehement einen Neustart, indem er vorgab auf der Partition sei nicht genügend Speicherplatz vorhanden…


/etc/init.d/mysql[12345]: ERROR: The partition with /var/lib/mysql is too full!

Anscheinend ist hier ein Bug im coreutils-Paket von Sarge, und da im stable-Branch nur noch Security-Updates gemacht werden, ist ein Update wohl nicht in Sicht. Mit ein wenig Überlegung und der Erklärung von Sven Hartge zu dem Problem habe ich aber einen Workaround finden können.
In der Datei /etc/init.d/mysql gibt es eine Zeile die den Speicherplatz auf dem Datenlaufwerk von MySQL prüft:


if LC_ALL=C BLOCK_SIZE= df --portability $datadir/. | tail -n 1 | awk '{ exit ($4>4096) }'; then
log_failure_msg "$0: ERROR: The partition with $datadir is too full!"
echo "ERROR: The partition with $datadir is too full!" | $ERR_LOGGER
exit 1
fi

Da „df“ aber nur falsche Angaben bringt wenn die Variable BLOCK_SIZE nicht gesetzt ist, ist es meiner Meinung nach am Einfachsten diese Variable auf den Wert zu setzen der bei der Abfrage verlangt wird, also 1024. Im Folgenden wird dann geprüft, ob noch mehr als 4096 Kbyte (= 4 MB) frei sind, was normalerweise auch der Fall sein sollte. Die veränderte Zeile sieht dann so aus:

if LC_ALL=C BLOCK_SIZE=1024 df --portability $datadir/. | tail -n 1 | awk '{ exit ($4>4096) }'; then

Man beachte die 1024 bei der BLOCK_SIZE Zuweisung.

Ich hoffe das hilft jemandem!

2 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert