Backup abgebrochen - Errorlog leer?

s24!

Registered User
Guten Abend. :)

Zur regelmäßigen Sicherung von Datenbanken verwende ich folgendes Script:

Code:
#!/bin/bash

timestamp=`date "+%a-%H"`
mysql_user="backup"
mysql_pw="passwort"
mysql_params="--add-drop-database --skip-opt --quick --create-options --lock-tables --add-locks --disable-keys --extended-insert --delayed-insert --set-charset --routines"
datadir="/ssd/mysql"
backupdir="/srv/web1"
errorlog="/root/mysql_backup.err"
reportmail="tech@domain.tld"

rm $errorlog
mkdir -p $backupdir
cd $datadir

for database in *
do
        if [ -d ${database} ]; then
                echo "Dumping $database"
                mysqldump -u $mysql_user -p$mysql_pw --databases $database $mysql_params | gzip --fast --stdout > $backupdir/${timestamp}_${database}.sql.gz 2>> $errorlog
        fi
done

echo "Reporting errors to staff"
cat $errorlog | mail -s "[sql-web1] Backup log" $reportmail

Nun hatte der MySQL-Server zum Zeitpunkt des Backups lauter endlos laufende Prozesse, versehentlich durch einen User gestartet. Das Monitoring meckerte darüber, keine DB-Verbindung mehr zu kriegen - Connection-Limit erreicht.
Das Script verschickt wie man sehen kann nach erfolgtem Backup eine Mail mit dem Errorlog an mich. Diese kam nach vier (statt 45) Minuten, und wie erwartet waren fast alle Backups komplett leer - gunzip liefert eine 0-Byte-Datei. Die, die nicht leer sind, scheinen auch komplett zu sein.

Der Vorgang an sich ist mir klar. Aber: Das Errorlog ist leer und das kann ich mir nicht erklären. Ich habe mal geprüft, wie mysqldump sich mit Fehlern verhält:

Code:
root@web1:~# mysqldump -pdaskannnichtfunktionieren > sql.dump 2> error.log

In diesem Fall landet die Fehlermeldung zwar interessanterweise im Dump statt im Errorlog, aber ich habe wenigstens eine - in den "richtigen" Dumps hab ich aber eben keine. Hat jemand eine Idee, wie das zustandegekommen sein mag bzw. wohin die Fehlermeldungen verschwunden sind?


Viele Grüße
Tim
 
Last edited by a moderator:
Neue Erkenntnisse:

1) Natürlich muss stderr von mysqldump abgefangen werden - und nicht von gzip dahinter, wie es bislang im Script stand. ;)
2) Auf stderr landen seitens mysqldump nur SQL-Fehler, keine Fehler im Programmaufruf an sich.

Da ich mir über Punkt 2 nicht im Klaren war, kam ich auch nicht gleich auf Punkt 1. Da hatte ich zwar vorhin dran gedacht, es aber verworfen, weil ja scheinbar sowieso alles in stdout landete. =)

Die Sache wäre damit also gelöst.


Viele Grüße
Tim
 
Back
Top