MySQL bzw. MariaDB bringt mit dem mysqldump Utility ein geeignetes Werkzeug mit, welches sich gut in einem Skript verarbeiten lässt. Das folgende Skript sichert zB alle vorhandenen MySQL Datenbanken, verzippt diese, verschiebt diese Dumps in ein Backup-Verzeichnis und löscht ältere Dumps wieder
Skript zum Sichern der Datenbanken
#!/bin/sh
# MySQL dump script
# v1.0
# prontosystems.de
# /var/scripts/sqldumper.sh
# where to save database dumps
SAVEDIR="/var/backups/mysql/"
# sql root password
SQLPASS="mysqlpass"
# dump file name ending
FILEEND="`date +%Y%m%d`"
# delete dumps older than n days
DELOLDER="6"
# absolute pathnames
MYSQLDUMP=`which mysqldump`
GZIP=`which gzip`
# scriptname and pid
SCRIPT="`basename $0`[$$]"
# delete files
for TODEL in `find ${SAVEDIR} -mtime +${DELOLDER}` ;
do
rm ${TODEL}
if [ $? -eq 0 ] ;
then
logger "${SCRIPT}: deleted ${TODEL}"
fi
done
# dynamic listing of databases at runtime
DATABASES=`mysql -u root -p$SQLPASS -e 'show databases' | cat | grep -v "^Database$" | grep -v "^information_schema$"`
# create SAVEDIR if it does not exist
if [ ! -w ${SAVEDIR} ] ;
then
mkdir ${SAVEDIR}
fi
# dump databases
for DB in ${DATABASES} ;
do
${MYSQLDUMP} -u root -p${SQLPASS} --single-transaction --opt --quote-names ${DB} | ${GZIP} -9 > ${SAVEDIR}${DB}-${FILEEND}.sql.gz
done
exit 0
Abschließend muss das Skript noch ausführbar gemacht werden und der Lesezugriff für die Benutzergruppe Jeder muss entfernt und root als Eigentümer und Gruppe eingetragen werden:
# chown root:root /var/scripts/sqldumper.sh
# chmod 750 /var/scripts/sqldumper.sh
Automatisierte Ausführung via cron
Um das Skript zeitgesteuert einmal am Tag ausführen zu lassen fügen Sie folgende Zeile in eine Ihrer crontab-Datein ein:
* 5 * * * root /var/scripts/sqldumper.sh > /dev/null 2>&1
![]()