[[:tux|{{ :linux.png?40|}}]]
===== 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:
#!/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:
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 **[[:tux:cron|-> Der Taskscheduler »cron«]]**
\\
--- //pronto 2011/05/23 12:58//
{{keywords>mysql mysqldump backup sicherung skript}}