/ 中存储网

使用mysqldump自动备份MySQL数据库的设置方法

2014-07-13 16:31:39 来源:中存储网
如何在Linux下自动定时备份MySQL数据库文件呢?

两点要求
(1)每天定时备份,可在深夜进行,以免影响服务器;
(2)自动删除上个月老的备份文件,但保留上月最后几天的备份。

解决办法
利用Linux的定时计划功能(Cron)和MySQL的导出功能(mysqldump)
编辑 /etc/crontab:
vim /etc/crontab
按顺序加入如下两个语句(带了注释):
# remove all old backup files less than 29 days
10 2 1 * * root find /mnt/database/ -name '*.sql.gz' -type f
-mtime -29 -mtime +7 -exec rm -f {} ;
# automatically backup mysql every day
15 2 * * * root mysqldump -u root -pPASSWORD --all-databases |
gzip > /mnt/database/`date +'%Y-%m-%d'`.sql.gz
cron中任务计划的格式为:
# m h dom mon dow user  command
即:
第一个数字表示分(minute);
第二个数字表示时(hour);
第三个数字表示天(day of month);
第四个数字表示月(month);
第五个数字表示分(day of week);
以上数字为*时表示不限。
接下来是执行命令的用户和命令内容。

命令解释
第一个语句的意思是在每月的1号的凌晨2点10分执行该任务,以root身份执行,任务内容为:找到备份文件夹 /mnt/database/ 下所有的文件名包含.sql.gz(-name)的文件(-type f),并且修改日期在29天以内的(-mtime -29)且大于7天的(-mtime +7)。最后删除找出来的这些文件(-exec rm -f {} )
第二个语句的意思是在每天的凌晨2点15分执行该任务,以root身份执行,任务内容为:使用mysqldump命令备份数据库,需要提供MySQL的用户名和密码(-u root -p PASSWORD),选项是备份所有数据库( --all-databases)。然后转用gzip命令压缩,将最终的备份文件保存到文件夹/mnt/database(当然,你得先手动创建这个文件夹),文件名为`date +'%Y-%m-%d'`.sql.gz。这里date是Linux显示当前时间的命令,+号后面的参数指定了时间显示格式为年-月-日,因为cron计划任务不能识别百分号%,所以得将参数中的%转义。整个date命令用反引号`括起来表示将date的输出结果替换引号中的内容。
请根据自己的情况修改备份文件夹和所需的MySQL用户名、密码。注意两点:
1、-pPASSWORD 中不要有空格,即-p与你的MySQL密码直接相连。
2、从本网页拷贝的命令,某些特殊字符可能出现问题,比如--all-databases前面的两个短横、英文单引号'
如果出现乱码,需要你自己改正。

更新配置
在/etc/crontab中加入了计划任务语句后,还需要手动更新下配置。cron服务默认是开启的,可以通过如下语句确保其开启:
service cron start
然后,更新下配置:
crontab /etc/crontab
如有问题请留言——仅限本文讨论的内容。