Skript zum Sichern der MySQL Datenbanken

Für MySQL Datenbanken gibt es afaik keine Backup-Agents, wie zB bei Microsoft SQL, welche die vorhanden Datenbanken im laufenden Betrieb sichern. Aber MySQL bringt mit dem »mysqldump« Utility bereits selbst 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 einen eigenen Ordner und löscht ältere Dumps wieder. Die Variable »$SQLPASS« wird mit dem aktuellen MySQL root Passwort belegt, hier im Beispiel wurde »mysqlpass« verwendet; ändern Sie dies entsprechend Ihrer Konfiguration:

/root/sqldumper.sh

#!/bin/sh
 
# MySQL dump script
# v1.0
# prontosystems.org
 
# where to save database dumps
SAVEDIR="/home/SQLDUMPS/"
 
# 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} --opt --quote-names ${DB} | ${GZIP} -9 > ${SAVEDIR}${DB}-${FILEEND}.sql.gz
done
 
exit 0

Warning: Dieses Skript enthält das MySQL Root Passwort im Klartext. Legen Sie es an einem geeigneten Ort ab und ändern Sie die Rechte entsprechend!

Im og Beispiel wird das Skript »sqldumper.sh« genannt und im Homeverzeichnis von »root« abgelegt. Abschließend wird dem Skript noch das Execute-Bit zugewiesen, damit es ausführbar wird und die Rechte für »Others« werden komplett entzogen. Der Besitzer sollte root sein und die Gruppe eine adäquate Sicherheitsgruppe (zB ebenfalls root):

# chmod 750 /root/sqldumper.sh

# ls -l /root/sqldumper.sh 
-rwxr-x--- 1 root root 1010 23. Mai 11:12 /root/sqldumper.sh

Damit das Skript regelmäßig ausgeführt wird, legen wir einen geeigneten Zeitpunkt in der »/etc/crontab« fest. Fügen Sie hierfür zB die Zeile »* 5 * * * root /root/sqldumper.sh > /dev/null 2>&1« in die »/etc/crontab« ein. Dadurch wird von Cron das angegebene Skript täglich um 00:05 Uhr ausgeführt:

/etc/crontab

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
*  5    * * *   root    /root/sqldumper.sh > /dev/null 2>&1

Weitere Hinweise zum Umgang mit »cron« finden Sie im Artikel -> Der Taskscheduler »cron«


pronto 2011/05/23 12:58

tux/mysql_dump.txt (5169 views) · Zuletzt geändert: 2012/05/23 09:17 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0