备份MySQL数据库和gzip

我试图从我的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并发送到远程服务器。 🙂