我目前通过每日执行mysqldump并使用logrotate保留mysqldump的最后7天来保持数据库的每日备份。
我想改进这个备份过程,以保持7日备份,3每周备份和12每月备份。
我发现这篇文章解释了如何使用logrotate进行修改: https ://web.archive.org/web/20070625054821/http: //hotcoding.com/os/sysadmin/35751.html
但是我使用dateext logrotate选项来命名我的备份文件,所以我不能使用这个解决scheme。
我如何使用logrotate和dateext选项来进行每日,每周和每月的备份?
查看脚本AutoMySQLBackup http://www.debianhelp.co.uk/mysqlscript.htm
这是一个很好的脚本来备份一个/所有数据库,使用mysqldump(假设这些是mysql数据库)
你可以添加nodateext选项到你的数据库logrotate conf。
您也可以在postrotate部分放置一些脚本,将您的每日和每周每月备份复制/移动到新的位置,这将防止通过logrotate删除它。
另一个解决scheme是编写简单的shell脚本来执行备份并将其转换为cron。 一些有用的命令在脚本中使用
date +%u - day of week date +%d - day of month find /path -type f -daystart -ctime +30 -exec rm -f '{}' \; - remove files older than 30 days
为什么你想要这种备份? 对我来说,这个状态毫无意义。 mysqldump只创build完整的数据库备份,所以你不需要每周/每月的备份。
使用完整/差异/增量备份时,每日,每周和每月备份是必要的。 在数据库损坏的情况下,只需要最后几次备份。
可能logrotate不是最好的工具来做到这一点。
我已经使用mysqldump和rsnapshot很长一段时间来达到完全相同的要求。
而不是mysqldump,你也可以考虑使用xtrabackup 。
这是另一个手工制作的版本,它更加简单,易于configuration。 https://github.com/jeevandongre/backup-restore