使用 logrotate 进行每日每周和每月数据库备份?

ben*_*ail 5 mysql linux backup logrotate

我目前通过执行每日 mysqldump 并使用 logrotate 保留 mysqldump 的最后 7 天来保持我的数据库的每日备份。

我想改进这个备份过程,以保留 7 次每日备份、3 次每周备份和 12 次每月备份。

我发现这篇文章解释了如何使用 logrotate 执行此操作:https ://web.archive.org/web/20070625054821/http: //hotcoding.com/os/sysadmin/35751.html

但是,我使用dateextlogrotate 选项来命名我的备份文件,因此我无法使用此解决方案。

如何使用 logrotate 和dateext选项进行每日、每周和每月备份?

sum*_*mar 1

您可以将nodateext选项添加到数据库 logrotate conf。

您还可以在 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
Run Code Online (Sandbox Code Playgroud)

为什么要进行这种备份?对我来说,这种策略毫无意义。Mysqldump 仅创建完整数据库备份,因此您不需要每周/每月备份。

当您使用完整/差异/增量备份时,每日、每周和每月备份是必要的。在数据库损坏的情况下,您只需要最后几次备份。

  • 保留较旧的备份在数据库损坏或未直接注意到的数据丢失的情况下非常有用。我们将每月备份保留 3 年,并“永远”保留 6 个月的备份。没有什么比发现您最旧的备份已经 7 天了,而会计人员在 10 天前删除了数据库的大部分内容更令人痛苦的了…… (5认同)