我需要使用 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 作业的最佳方式是啥? [复制]