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ß!