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

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

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

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

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

【问题讨论】:

    标签: php mysql cron


    【解决方案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 如何通过文件数据进行管道传输知之甚少,无法说出哪种方式更有效!很可能你的建议更好。
      猜你喜欢
      • 1970-01-01
      • 2022-12-18
      • 2013-02-15
      • 2014-08-07
      • 2014-10-16
      • 2013-11-27
      • 2018-04-27
      • 1970-01-01
      • 2013-06-12
      相关资源
      最近更新 更多