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

Aus Synology Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: Hier soll dieser Artikel rein: http://www.synology-forum.de/showthread.html?t=895&highlight=cronjob)
 
(Cronjob)
 
(9 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Hier soll dieser Artikel rein: http://www.synology-forum.de/showthread.html?t=895&highlight=cronjob
+
[[Category:Backup and Recovery]][[Category:cron]][[Category:mySQL]]
 +
== Das Skript ==
 +
* 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:
 +
<pre>
 +
#!/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</pre>
 +
* 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.
 +
== Cronjob ==
 +
Das Skript muss noch in der Datei /etc/crontab eingetragen werden, um einen zeitgesteuerten Aufruf zu ermöglichen. Dazu wird das Kommando '''sh /volume1/deinpfad/mysqlbackup.sh''' mit einem passenden Präfix eingetragen, und anschließend der cron daemon neu gestartet. Details dazu sind im Artikel über [[Cron]] zu finden, hier einige Beispiele für Präfixe (Tabs verwenden, keine Leerzeichen!):
 +
<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>
 +
 
 +
==Links==
 +
* Referenz für [http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html mysqldump in MySQL 5.1]

Aktuelle Version vom 28. September 2020, 12:20 Uhr

Das Skript

  • 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.

Cronjob

Das Skript muss noch in der Datei /etc/crontab eingetragen werden, um einen zeitgesteuerten Aufruf zu ermöglichen. Dazu wird das Kommando sh /volume1/deinpfad/mysqlbackup.sh mit einem passenden Präfix eingetragen, und anschließend der cron daemon neu gestartet. Details dazu sind im Artikel über Cron zu finden, hier einige Beispiele für Präfixe (Tabs verwenden, keine Leerzeichen!):

#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

Links