- 我目前正在建立一个使用 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 crontab
man logrotate