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

使用 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选项进行每日、每周和每月备份?

答案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

也许 logrotate 不是执行此操作的最佳工具。

我已经使用过 mysqldump 和快照很长时间才能达到完全相同的要求。

除了 mysqldump,您还可以考虑使用备份

答案4

这是另一个手工制作的版本,它更加简单且易于配置。https://github.com/jeevandongre/backup-restore

相关内容