我试图从我的MySQL备份中获得更多的用处。 我想在从cron作业完成时将gzip备份gzip。 这是我迄今为止做的备份脚本。
#!/bin/sh date=`date -Iminutes` mysqldump --all-databases > /var/sqlbackup/sqlbackup-$date.sql -pmypassword find /var/sqlbackup/ -mtime 3 | xargs rm
任何帮助都将是有益的,即使这是一个如何做得更好的指针。
以下是我使用的备份/维护脚本:
#!/usr/bin/sh #backup all mysql databases # list MySQL databases and dump each DIR= DATESTAMP=$(date +%Y%m%d) DB_USER= DB_PASS= # remove old backups find ${DIR} -type f -mtime +5 -exec rm -rf {} \; DB_LIST=`mysql -u $DB_USER -p"$DB_PASS" -e'show databases;'` DB_LIST=${DB_LIST##Database} for DB in $DB_LIST; do FILENAME=${DIR}${DB}-${DATESTAMP}.sql.gz mysqldump -u $DB_USER -p"$DB_PASS" --opt --flush-logs $DB | gzip > $FILENAME done mysqlcheck -u $DB_USER -p"$DB_PASS" --all-databases > /root/mysql_backups/check_errors-${DATESTAMP}.log
此脚本为每个数据库生成单独的gzip备份,因此,如果一个数据库存在问题,则不必恢复整个服务器的数据库。 它还包含一些mysql检查的完整性,并find旧的数据库备份并删除它们。
按要求恢复:
我必须恢复几次。 发生了。
gunzip backup_file.sql.gz mysql -u <username> -p <database_name> < backup_file.sql
可能还有更“一条线”的做法……但这就是我的工作方式。
#!/bin/sh date=`date -Iminutes` find /var/sqlbackup/ -name 'sqlbackup-*' -mtime +2 -delete mysqldump --all-databases -pmypassword | gzip > /var/sqlbackup/sqlbackup-$date.sql.gz
你可以pipe到gzip压缩。
我把这个find移到了mysqldump之前。 我不确定你的数据库有多大,但它有助于减less磁盘使用,避免任何空间问题。
通常使用-mtime +2而不是-mtime 3来影响两天以前的任何事情,而不是三天之前的文件。 这样,如果你的cron错过了一天,你不会收到删除错过的旧文件。
我个人更喜欢限制find名称模式,以确保您不会意外删除任何内容。
如果您不想使用xargs ,find中的-delete选项会很有帮助。 两种方式都可以,但是我更喜欢在可能的情况下使用更less的命令。
您可以将gzip /var/sqlbackup/sqlbackup-$date.sql添加到脚本的末尾。
尝试这个:
date=`date -Iminutes` mysqldump --all-databases -pmypassword | gzip > /var/sqlbackup/sqlbackup-$date.gz
你有没有看过R-FXnetworking的irsync?
一个伟大的小脚本,可以让你把你的数据库的热拷贝和gzip并发送到远程服务器。 🙂