我如何每天使用crontab自动还原MySQL数据库?

时间:2019-08-08 06:31:54

标签: mysql sql database cron automated-deploy

我有一些演示网站用户可以注册和登录并共享具有某些功能的帖子添加产品,但其仅用于演示目的,因此每天有10至15人注册并测试其工作方式

但是我不需要每个人的数据,我在此SQL中有新的mysql.sql文件,没有太多的数据,我想通过crone标签执行自动化任务

每天都会删除当前数据库并上传我的mysql.sql文件

我该怎么做?

  

os:ubuntu 19.04

3 个答案:

答案 0 :(得分:2)

最初,如果您的数据库也包含存储过程,则只需确保还原文件中也包含要删除存储过程的查询,即可还原数据库。

要删除存储过程,请在 mysql.sql 文件中添加以下行。

DELETE FROM mysql.proc WHERE db like '%{{database_name}}%' AND type = 'PROCEDURE'

此后,您必须添加一个cron作业,该作业将每天恢复数据库,为此请打开终端并键入 sudo crontab -e

现在输入 0 13 * * * mysql -u {{user_name}} -p {{password}} {{database_name}} <{{path_to_your_sql_file}} 假设您必须还原数据库每天下午1点。

添加作业后,保存文件。

添加作业后,您可以在终端

中键入 sudo crontab -l <​​/ strong>进行检查

答案 1 :(得分:1)

因为您要做的就是每天“重新安装”您的数据库(对吗?)。您可以在第一行中将其添加到安装脚本中:

          DROP database <your databese>
          # Here you re-create your DB again (your current sql script)

假设您将此脚本称为“ reinstall.sql”;您可以将以下行添加到您的cron表中(该命令每天@ 1am运行):

 0 1 * * *  mysql -u username -p password database_name < /path/to/your/reinstall.sql

要打开cron表,您可以执行以下操作:

 sudo crontab -l -u [USER_WITH_RIGHTS_TO_EDIT]

希望有帮助!

答案 2 :(得分:1)

MySQL将所有数据库数据保留在一个目录中。默认情况下,该目录位于MySQL安装中,称为 data 。例如,如果您的默认安装位于 c:/Users/prakash/mysql-8.0.17 ,则其中名为 data 的目录将可用。

原则上,您将必须将此数据目录的新副本(没有任何在线用户信息,就像您通过运行DDL脚本第一次构建数据库时的样子)保留在某个地方,让我们在 c :/Users/prakash/mysql-8.0.17/fresh 。然后,您可以编写无用的工作来实现关注并在任何方便的时间安排它。

  1. 关闭数据库
  2. (递归)删除 data 目录
  3. (递归地)复制数据目录所在的目录
  4. 将复制的目录重命名为data
  5. 重新启动数据库