Backup der MySQL-Datenbank über einen cronjob: Unterschied zwischen den Versionen

Aus
Keine Bearbeitungszusammenfassung
Zeile 25: Zeile 25:
* 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!):
* 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!):
<pre>
<pre>
#minute hour    mday    month  wday    who    command
1      0      *      *      *      root    sh /volume1/deinpfad/mysqlbackup.sh
1      0      *      *      *      root    sh /volume1/deinpfad/mysqlbackup.sh
</pre>
</pre>
Zeile 33: Zeile 34:


  > kill -HUP 1229</pre>
  > kill -HUP 1229</pre>
== 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'':
<pre>
#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
</pre>
<pre>
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)
</pre>

Version vom 13. November 2008, 14:37 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)