Backup der MySQL-Datenbank über einen cronjob: Unterschied zwischen den Versionen
imported>Onys |
imported>Raymond →Vorbemerkungen: typos |
||
Zeile 5: | Zeile 5: | ||
#!/bin/bash | #!/bin/bash | ||
# | # | ||
# dieses | # dieses Skript kann man beliebig oft ausführen | ||
# | # | ||
# | # Anzahl der Sicherungen die aufgehoben werden sollen | ||
KEEP=2 | KEEP=2 | ||
BACKUPS=`find /volume1/deinpfad/backup -name "mysqldump-*.gz" | wc -l | sed 's/\ //g'` | BACKUPS=`find /volume1/deinpfad/backup -name "mysqldump-*.gz" | wc -l | sed 's/\ //g'` |
Version vom 25. Oktober 2009, 01:06 Uhr
Vorbemerkungen
- Das unten beschriebene Skript sowie die erstellten Backups sollte man am besten irgendwo auf Volume1 speichern, den gewünschten Pfad muss man im Skript überall dort eingeben, wo bis jetzt deinpfad steht. Auch das sqlpasswort muss noch entsprechend angepasst werden.
Man erstellt eine Datei mysqlbackup.sh mit folgendem Inhalt:
#!/bin/bash # # dieses Skript kann man beliebig oft ausführen # # Anzahl der Sicherungen die aufgehoben werden sollen KEEP=2 BACKUPS=`find /volume1/deinpfad/backup -name "mysqldump-*.gz" | wc -l | sed 's/\ //g'` while [ $BACKUPS -ge $KEEP ] do ls -tr1 /volume1/deinpfad/backup/mysqldump-*.gz | head -n 1 | xargs rm -f BACKUPS=`expr $BACKUPS - 1` done DATE=`date +%Y%m%d%H%M%S` rm -f /volume1/deinpfad/backup/.mysqldump-${DATE}.gz_INPROGRESS /usr/syno/mysql/bin/mysqldump --opt -uroot -psqlpasswort --all-databases | gzip -c -9 > /volume1/deinpfad/backup/.mysqldump-${DATE}.gz_INPROGRESS mv -f /volume1/deinpfad/backup/.mysqldump-${DATE}.gz_INPROGRESS /volume1/deinpfad/backup/mysqldump-${DATE}.gz exit 0
- Die Datei wird jetzt in /volume1/deinpfad gespeichert.
- Jetzt muss noch das Unterverzeichnis /volume1/deinpfad/backup angelegt werden.
- Testweise kann man das Skript schon mal mit "sh /volume1/deinpfad/mysqlbackup.sh" starten. Bei jedem Aufruf werden zunächst die überflüssigen Backups gelöscht und dann das neue Backup angelegt.
- Zum Schluss muss man dieses Skript noch in der Datei /etc/crontab einfügen, um einen zeitgesteuerten Aufruf zu ermöglichen. Man fügt dazu folgende Zeile in die crontab ein (Tabs verwenden, keine Leerzeichen!):
#minute hour mday month wday who command 1 0 * * * root sh /volume1/deinpfad/mysqlbackup.sh
- Diese Zeile bewirkt, dass das Skript täglich um 0:01 Uhr ausgeführt wird (direkt nach dem Aktualisieren der Uhrzeit).
- Zum Abschluss muss der cron-Dienst bzw. die Synology Station neu gestartet werden bzw. einen SIGHUP Signal an das crond Prozess senden und einen neuscan der crontab erzwingen:
> ps | grep crond | grep -v grep 1229 root 580 S /usr/sbin/crond > kill -HUP 1229
Crontab Aufbau
Aufbau der cron-Tabellen
cron-Tabellen bestehen aus beliebig vielen Zeilen. Kommentare werden durch # in Spalte eins eingeleitet. Sie gelten bis zum Zeilenende. Leerzeilen werden ignoriert.
Nach der Deklaration lokaler Variablen folgt die eigentliche Tabelle. Diese besteht aus sieben Spalten pro Zeile. Die ersten fünf Spalten spezifizieren den Ausfügrungszeitpunkt. Die sechte Spalte enthält den Namen des Users, unter dessen Account der Dienst ausgeführt wird. Der Rest wird als siebte Spalte interpretiert und enthält die auszuführenden Befehle.
Die Terminfelder
Das erste Feld beinhaltet die Minute, das zweite die Stunde, das dritte den Tag, das vierte den Monat. dow (day of the week) steht für den Wochentag.
Innerhalb der Terminfelder können die Angaben als Zahlen (im Feld month und dow auch über die englischen Namen) erfolgen. Mehrere Einzeleinträge sind möglich. Sie werden durch Kommata getrennt. Auch Bereiche können angegeben werden. 2,3,4,6 kann auch als 2-4,6 angegeben werden. Das *-Zeichen wird als Joker eingesetzt, das den Bereich ersetzen kann (<erstes Element>-<letztes Element>). Die Felder werden durch ein TAB voneinander getrennt.
Beispielaufbau der cron-Tabelle
Beispiel einer Crontab:
#minute hour mday month wday who command # Command jede Minute ausführen: * * * * * root sh /volume1/deinpfad/mysqlbackup.sh # Jeden Tag um 22:00 h ausführen 0 22 * * * root sh /volume1/deinpfad/mysqlbackup.sh # Jeden Sa. um 22:00 h ausführen 0 22 * * 6 root sh /volume1/deinpfad/mysqlbackup.sh # Alle 5 min ausführen */5 * * * * root sh /volume1/deinpfad/mysqlbackup.sh # Alle 2 Std. ausführen 00 */2 * * * root sh /volume1/deinpfad/mysqlbackup.sh # Von Mo. bis Fr. um 01:00 h ausführen 0 1 * * 1-5 root sh /volume1/deinpfad/mysqlbackup.sh
Die Struktur ist also wie folgt zu verstehen: * * * * * auszuführender Befehl ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ └──── Wochentag (0-7) (Sonntag =0 oder =7) │ │ │ └────── Monat (1-12) │ │ └──────── Tag (1-31) │ └────────── Stunde (0-23) └──────────── Minute (0-59)