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