MySQL Backup alle Datenbanken
# mysql-backup.sh Montag /backups
MySQL Backup-Script
#! /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
#
if [ $# -ne 2 ]; then
printUsage
fi
backup
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.
# 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