MySQL定时自动备份及自动删除老的备份
1.背景 目前接触的项目中,发现大部分项目开发环境和测试环境的数据库都没有自动备份,如果误删可能导致一系列问题,虽然有些项目有数据迁移工具,但是迁移工具里面仅仅包含种子数据,对于开发测试来说,最重要的是已产生的数据,项目复杂程度不同,重新造数据可能费时费力,故分享下自动备份(含仅保留最近10天的备份,防止备份文件无限增大)
2.方式
2..1 关于mysql备份,本文使用mysqldump实现,由于使用到了mysqldump,故需要在mysql数据库所在的服务器执行
2.2 新建一个备份的shell文件:touch /home/cap.backup/referral.db.backup.sh,然后vi /home/cap.backup/referral.db.backup.sh 按i进入编辑写入下述内容(路径及名称根据项目自己指定,mysqldump命令执行时,目录可能不同,具体根据安装时确定,本文示例在:/usr/bin/mysqldump 可执行)
#!/bin/bash #1.数据库信息 db_user="root" db_passwd="Ben@123" db_name="referral" db_backpath="/home/cap.backup/$db_name.dbbackup/" #2.处理备份路径及备份时间 echo "ready to backup database, the folder is $db_backpath" mkdir $db_backpath -p && cd $db_backpath backup_time=$(date "+%Y%m%d-%H%M") #3.执行mysql备份 /usr/bin/mysqldump -u$db_user -p$db_passwd $db_name > "$db_backpath/$db_name"-"$backup_time.sql" echo "database $db_name backup success" #删掉当前目录10天之前的备份文件 find . -mtime +10 -name "*.sql" -exec rm -rvf {} \;
2.3 对此 referral.db.backup.sh 赋予执行权限,方可执行,可使用chmod命令:
chmod +x /home/cap.backup/referral.db.backup.sh #或者 chmod 777 /home/cap.backup/referral.db.backup.sh
2.4 使用 crontab -e 命令,在打开的文件中,按 i 插入下述命令(以下)
#每天早上5点10分执行一次cap_referral库备份 10 05 * * * /[/color][color=#000]home/cap.backup/referral.db.backup.sh[/color][color=#000] #每天早上5点15分执行一次cap库备份 15 05 * * * [/color][color=#000][color=#000]/[/color][/color][color=#000]home/cap.backup/referral.db.backup.sh[/color][color=#000]
附:一般不需要重启crond服务,如果不执行的话,可以尝试手工重启下crond服务:service crond restart 或者 /sbin/service crond restart
附:如果要验证编写的脚本,可以手工执行下referral.db.backup.sh,看是否会产生备份文件
#进入 crontab 定时任务编辑界面:
#crontab -e
#每分钟执行一次备份脚本:
#* * * * * sh /home/cap.backup/referral.db.backup.sh
#每五分钟执行 :
#*/5 * * * * sh /home/cap.backup/referral.db.backup.sh
#每小时执行:
#0 * * * * sh /home/cap.backup/referral.db.backup.sh
#每天执行:
#0 0 * * * sh /home/cap.backup/referral.db.backup.sh
#每周执行:
#0 0 * * 0 sh /home/cap.backup/referral.db.backup.sh
#每月执行:
#0 0 1 * * sh /home/cap.backup/referral.db.backup.sh
#每年执行:
#0 0 1 1 * sh /home/cap.backup/referral.db.backup.sh