我需要使用 cron 作业每 30 分钟恢复一次数据库(mysql)

Posted

技术标签:

【中文标题】我需要使用 cron 作业每 30 分钟恢复一次数据库(mysql)【英文标题】:I need to restore a database (mysql) every 30 minutes using a cron job 【发布时间】:2011-04-30 23:32:31 【问题描述】:

我是 cron 作业的新手,我需要每 30 分钟恢复一次数据库 (mysql)。是否有一个 cron 作业命令可以从已压缩的 .sql 文件中恢复数据库?

或者我是否需要创建一个 php 脚本来执行此操作并创建一个 cron 作业以每三十分钟调用一次此脚本?

另外,这是一个单独的问题,但仍与 cron 作业有关,我使用 cron 作业每天备份一次不同的数据库,将其 gzip 压缩并将其放在根目录上方的文件夹中。有没有办法(自动)删除超过一个月的任何内容?或者,至少保留最近的 20 个备份并删除其余的?

除了随机的论坛帖子之外,没有很多关于这个主题的好教程。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

MySQL 不能直接处理 gzip 压缩的数据,但是通过 gzcat 管道然后将其管道传输到 mysql 是微不足道的:

gzcat name_of_file.sql.gz | mysql -u....

【讨论】:

【参考方案2】:

您可以编写一个 bash 脚本来执行此操作。

mysql -uPutYourUserHere -pPutYourPasswordHere PutYourUserHere_databaseName < database.sql

没有任何东西可以自动删除某些内容。但是你可以在你的 cron 工作中做:

find /path/to/files -mtime +30 -exec rm  \;

【讨论】:

我的意思是删除旧备份的 cron 作业。我认为“自动”具有误导性。会尝试你的建议。恐怕我不太熟悉 bash 脚本。 find 是一个非常强大的工具。有时,如果您只是 google “查找删除月份”,您会找到正确的答案。 我收到一条错误消息,上面写着 find: missing argument to `-exec' 我在我的 mac 上试过这个,它工作了 find 。 -mtime +30 -exec rm \; 注意: 和 \; 之间需要有空格【参考方案3】:

关于如何导入转储文件,简单地放一个

mysql -u user -ppassword databasename < /path/to/dump.sql 

进入 cron 作业。

更多详情:How do I restore a MySQL .dump file?

【讨论】:

我了解这个 Pekka 的历史,但执行此方法是否比 cat /path/to/file.sq/ | mysql -u root -ppassword 更有效? @Daryl 我对 Unix/Linux 如何通过文件数据进行管道传输知之甚少,无法说出哪种方式更有效!很可能你的建议更好。

以上是关于我需要使用 cron 作业每 30 分钟恢复一次数据库(mysql)的主要内容,如果未能解决你的问题,请参考以下文章

每 30 秒运行一次 cron 作业的最佳方式是啥? [复制]

使用 Node-Cron 每 45 分钟运行一次 Cron 作业

每天 2:30 运行一次 cron 作业?

每分钟运行一次 cron 作业,但从特定时间开始

node-cron 每 3 小时运行一次作业

如何从 0 分钟以外的时间开始每 5 分钟运行一次 cron 作业?