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