Backups aller MySQL-Datenbanken, Version 2
28.11.2007 | Code | 0 KommentareIch habe das Skript, das in diesem Post beschrieben ist, überarbeitet. Nun macht es nicht nur Backups aller lokalen MySQL-Datenbanken, sondern löscht vorher auch alle Backups, die seit einer gewissen Anzahl an Tagen nicht mehr geändert wurden.
Vorteil: Im Backup-Verzeichnis liegt nun immer nur eine festgelegte Anzahl an Sicherungen. Das sieht dann z.B. so aus:
test@bheil-pc:~> ls /var/backups/sql/
insgesamt 28K
drwxr-xr-x 2 root root 4,0K 2007-11-22 06:03 2007.11.22
drwxr-xr-x 2 root root 4,0K 2007-11-23 06:03 2007.11.23
drwxr-xr-x 2 root root 4,0K 2007-11-24 06:03 2007.11.24
drwxr-xr-x 2 root root 4,0K 2007-11-25 06:03 2007.11.25
drwxr-xr-x 2 root root 4,0K 2007-11-26 06:03 2007.11.26
drwxr-xr-x 2 root root 4,0K 2007-11-27 06:03 2007.11.27
drwxr-xr-x 2 root root 4,0K 2007-11-28 15:27 2007.11.28
Hier nun das angepasst Skript:
#!/bin/bash
####################
# Das hier anpassen!
####################
# Das Sicherungsverzeichnis - hier landen alle Backups als
# Unterverzeichnisse und nach Datum sortiert
# Achtung: Dieses Verzeichnis muss existieren und das
# Skript muss dort Schreibrechte besitzen!
SAVEDIR="/home/backup/sql"
# Anzahl der Sicherungen, sprich Tage - 6 steht fuer eine
# Woche (7 Sicherungen, da die aktuelle nicht gezaehlt wird)
DAYSOLD="6"
# Temp-Verzeichnis (das Skript braucht dort Schreibrechte)
TMPDIR="/tmp"
# Root-Passwort zur MySQL-Datenbank
DBPWD="PASSWORT"
####################
# Ab hier i.d.R. keine Aenderung mehr noetig
####################
# Erzeuge Liste aller Datenbanken in $TMPDIR/dbaselist.txt
mysqlshow -u root -p$DBPWD | awk '{print $2}' | \
grep -v Databases | sort > $TMPDIR/dbaselist.txt
# Finde und loesche alles, was seit $DAYSOLD Tagen nicht
# veraendert wurde
find $SAVEDIR -maxdepth 1 -mindepth 1 \
-mtime +$DAYSOLD -exec rm -rf {} \;
# Geh ins Sicherungsverzeichnis und lege ein Verzeichnis
# des heutigen Datums an
cd $SAVEDIR
mkdir -p `date +%Y.%m.%d`
cd `date +%Y.%m.%d`
# Liste der Datenbanken durchgehen und Sicherung erstellen
for x in `cat /tmp/dbaselist.txt`; do
mysqldump --opt -u root -p$DBPWD $x >$x.sql;
done;
# Aufraeumen
rm -f *.gz
rm -f /tmp/dbaselist.txt
# Alle Dateien zippen
gzip *
