我目前通过每天执行 mysqldump 来每日备份我的数据库,并使用 logrotate 保留 mysqldump 的最后 7 天。
我想改进这个备份过程以保留 7 个每日备份、3 个每周备份和 12 个每月备份。
我发现这篇文章解释了如何使用 logrotate 来实现这一点:https://web.archive.org/web/20070625054821/http://hotcoding.com/os/sysadmin/35751.html
但是我正在使用dateext
logrotate 选项来命名我的备份文件,所以我无法使用此解决方案。
如何使用 logrotate 及其dateext
选项进行每日、每周和每月备份?
答案1
查看脚本 AutoMySQLBackup https://sourceforge.net/projects/automysqlbackup/
这是一个很棒的脚本,使用 mysqldump 来备份一个/所有数据库(假设这些是 mysql 数据库)
答案2
您可以将nodateext
选项添加到数据库 logrotate 配置中。
您还可以在 postrotate 部分放置一些脚本,将您的每日和每周每月备份复制/移动到新位置,这将防止被 logrotate 删除。
另一个解决方案是编写简单的 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 仅创建完整数据库备份,因此你不需要每周/每月备份。
当您使用完整/差异/增量备份时,每日、每周和每月备份都是必要的。如果数据库损坏,您只需要最后几个备份。
答案3
答案4
这是另一个手工制作的版本,它更加简单且易于配置。https://github.com/jeevandongre/backup-restore