Implementierung einer regelmäßigen Sicherung sämtlicher MySQL-Datenbanken auf einem Linux-System, unter Verwendung von Cron und Gzip. Dies stellt eine unkomplizierte Lösung dar, die mit den Standard-Tools, die in den meisten Linux-Distributionen enthalten sind, realisiert wird.
Mit diesem Skript kann man manuell, oder per Cron alle MySQL-Datenbanken sichern.
Beispiel Aufruf des Skripts:
# mysql-backup.sh Montag /backups
MySQL Backup-Script
Name des Skripts: mysql-backup.sh
Das Skript nach /usr/local/sbin kopieren.
#! /bin/bash
PREFIX=$1
destination=$2
backupfolder=$destination/$PREFIX"_sqlbackup"
user="root"
password="secret"
#
# usage message
#
printUsage () {
echo "USAGE: <prefix> <destination path>"
exit 1
}
#
# backup function
#
backup () {
echo "starting MySQL backup"
databases=$( mysql -u$user -p$password -e 'show databases' --batch | grep -v mysql | grep -v information_schema | grep -v Database | grep -v performance_schema )
if [ ! -d $backupfolder ]; then
mkdir $backupfolder
fi
for database in $databases
do
filename=$PREFIX.$database.sql.gz
mysqldump -u$user -p$password $database | gzip > $backupfolder/$filename
#Verbosity
#echo done $filename
done
echo "done MySQL backup"
}
#
# main section
cron job
Abschließend muss jetzt noch ein cron job angelegt werden, der die Sicherung regelmäßig startet. Das Sicherungs-Skript erwartet 2 Parameter. Der erste Parameter ist ein Datei-Präfix, welcher vor den Sicherungs-Dateinamen geschrieben wird. Wir geben hier den Tag für die tägliche Sicherung und den Monat für die monatliche Sicherung mit Hilfe des date Kommandos mit. Das %-Zeichen muss bei der Verwendung innerhalb von Crontab allerdings noch mittels Backslash () escaped werden. Der zweite Parameter ist der Ziel-Ordner in dem die Sicherungsdateien abgelegt werden.
Beispiel: Cronjob in /etc/cron.d/mysql-backup
# Datensicherung täglich Nachts um 1:00 Uhr
0 1 * * * root /usr/local/sbin/mysql-backup.sh $(date +\%a) /var/mysql-backups/daily
# Datensicherung 1 x pro Monat immer am 1. um 3 Uhr
0 3 1 * * root /usr/local/sbin/mysql-backup.sh $(date +\%b) /var/mysql-backups/monthly
Jetzt sollten täglich Sicherungsdateien erzeugt werden die unter /var/mysql-backups zu finden sind.
Viel Spaß!
