Peinlich. Peinlich.
Da arbeitet man jahrelang* als Linuxadmin und dann sowas..
Aber der Reihe nach. Die Aufgabe war einfach, jeden Tag um 02:00 Uhr soll ein Backup aller MySQL-Datenbanken gemacht, mit bzip2 komprimiert und unter /media/backup/mysql-dbs.YYMMTT.bz2 abgelegt werden.
Lösen tut man das dann wie folgt:
00 2 * * * root mysqldump --all-databases --user=root --password=xxxxx |bzip2 > /media/backup/mysql-dbs.$(date +%y%m%d).bz2
Dieses ergibt aber nur eine tolle Fehlermail von Cron:
/bin/bash: -c: line 0: unexpected EOF while looking for matching `)’
/bin/bash: -c: line 1: syntax error: unexpected end of file
Das Problem ist, das Cron das Prozentzeichen (%) als NewLine interpretiert.
Daher muss es escaped werden, damit man es als Bestandteil eines Kommandos, z.B. bei date, verwenden kann.
Leider steht dies nicht in jeder Manpage. (Bei Debian steht es drin -> man 5 crontab)
Richtig ist also folgendes:
00 2 * * * root mysqldump --all-databases --user=root --password=xxxxx |bzip2 > /media/backup/mysql-dbs.$(date +\%y\%m\%d).bz2
* = Ich zähl die Ausbildung jetzt einfach mal dazu. :-)
Für solche Fälle empfehle ich immer automysqlbackup.
Zu finden bei sourceforge http://sourceforge.net/projects/automysqlbackup/
Dies regelt die Sache sehr schön.
Ich habe mir angewöhnt für solche Sachen, die in der Crontab eher für Chaos sorgen und der Übersichtlichtkeit nicht gerade hilfreich sind, Skripte zu schreiben.
Denn früher oder später willst Du vor oder nach dem Dump noch etwas anderes machen und spätestens dann wirds in der Crontab sehr sehr hässlich.
Desweiteren solltest Du Dir unbedingt maatkit anschauen, im speziellen mk-parallel-dump:
http://www.maatkit.org/
http://www.maatkit.org/doc/mk-parallel-dump.html
Wenn Du einmal mit maatkit gearbeitet hast, willst Du nie wieder mit mysqldump rumhantieren müssen (zumal das “parallel” dort im Namen nicht nur zum Spaß steht :)
Gruß,
Marcel.
Ja, das Problem hatte ich auch mal.
Hat etwas gedauert bis ich drauf gekommen bin.
Wie sagt man doch: “Man lernt nie aus”
Gruß Emzy