使用 cronjobs、bashscripts 自动执行 MySQL 备份

使用 cronjobs、bashscripts 自动执行 MySQL 备份
  • 我目前正在建立一个使用 MySQL 数据库的系统。
  • 我想要创建每天晚上 10:00 运行的自动备份,并将备份保留 30 天。

我知道有一种方法可以使用 cronjob 和执行的 bashscript。我已经.my.cnf为我的 SQL 用户配置了,因此我不必将密码粘贴到 bashscript 中。

我发现的所有教程都有一些我不需要的额外内容,而且目前我对自己创建脚本没有信心。

您有一个简单易行的想法或教程吗?

答案1

其实不需要 bash 脚本。首先,找出适合你的备份命令。原则上,你可以做一些简单的事情:

mysqldump > /path/to/mysqldump.sql 2>/path/to/mysqldump.err

这会将所有数据库的内容写入名为 的文件mysqldump.sql。此文件的形式是,如果您需要在灾难后恢复数据库,您只需执行mysql < /path/to/mysqldump.sql。此外,mysqldump它保留了数据库的完整性,即,即使在转储时正在进行事务,它也会生成数据库的一致副本。如果出现错误,它将被写入mysqldump.err

您可能需要调查诸如-u--login-path=local和 之类的参数--events。此外,您可能还想指定--databases要备份的某些内容。出于讨论的需要,我不会深入讨论所有这些内容。

mysqldump命令运行得令您满意时,您会希望将其作为 cron 作业自动运行。要每天 22:00 运行转储,请在 cron 选项卡中指定此项:

0 22 * * * mysqldump ... (etc)

当然,这将每天覆盖转储的数据库。要保留 30 份副本,您需要使用logrotate。在 中/etc/logrotate.d,创建一个名为(假设) 的新文件mysqldump。在此文件中输入以下内容:

/path/to/mysqldump.sql {
  su (your username)
  rotate 30
  daily
  missingok
  notifempty
}

保存文件并重新启动 logrotate。

Logrotate 会每天访问您的 mysqldump 目录,并将最新的重命名为mysqldump.sql.1,将最新的 1 重命名为mysqldump.sql.2,依此类推。如果您已经有 30 个副本,它将删除最旧的副本。

至于教程,你其实不需要。只需阅读和man mysqldump。这些都是很好理解的工具,可以简单地使用。man crontabman logrotate

相关内容