要自动备份mysql一般是通过mysqldump来执行的,下面用到的命令会有mysqldump、date、find、rm
先上完整shell script
mysqldump -uroot -pyourpassword database_name >>/your/path/$(date +%Y_%m_%d)_$(date +%s).sql;
/usr/bin/find /your/path/ -mtime +7 -exec rm -rf {} \; ;
(注意:执行多个shell脚本要以分号作为分隔符!命令最好要写全路径,否则系统会找不到命令从而导致执行失败,例如我要补全find的路径但是我不清楚全路径是什么,那就先在linux用 which find 找出find的全路径)
其中红色字体的部分需填写你自己的数据库账号、密码、数据库名称、备份路径,如我有一个名为test的数据库需要备份,账号为root,密码为123456,则:
mysqldump -uroot -p123456 test >> /backup/test/$(date +%Y_%m_%d)_$(date +%s).sql;
find /backup/test/ -mtime +7 -exec rm -rf {} \;
这里我用的结构为根目录下创建一个backup文件夹,该文件夹下创建需要备份的数据库名称,然后直接以日期作为sql语句的命名,自动清理超过七天的sql语句。
语句写好后保存,如我保存为test.sh,保存到backup文件目录下
然后用crontab定时器设置任务
执行命令:crontab -e
定时器的编写操作是跟vi操作一样的,按a添加
crontab前五个时间参数分别为:minute hour dayOfMonth month dayOfWeek
需要注意的是第五个参数是0-6,0代表周日
如我想每天的十二点定时备份,则应写为
00 00 * * * /backup/test.sh #*为通配符,时间参数后为需要执行的shell命令语句,也可以执行一个.sh文件,这里执行的就是一个sh文件
如果是要每周的星期三的晚上十二点备份,则为:
00 00 * * 3 /backup/test.sh
这样子就完成了数据库的自动备份以及清理过期的sql备份了
测试时可以让定时器每分钟备份一次,看看是否成功
* * * * * /backup/test.sh