【问题标题】:delete database with cron jobs使用 cron 作业删除数据库
【发布时间】:2013-08-04 00:23:12
【问题描述】:

我需要知道如何使用 cron 作业每 6 小时删除或删除一个数据库,然后他们使用演示 .sql 创建它。 在我的 cpanel 中,我像这样创建 cron:

0   0   1   *   *   /home/escyv/restore_data.sh

并且 cron 执行命令,但在 cron 作业执行命令时不进行任何删除。

这里是脚本:

restore_data.sh

#! /bin/sh
clear;
#fill in your database information here
user="escyv_cyv";
password="ky21m1";
server="localhost";
database_name="escyv_cyv";

#path to the backup database file
restore_file="0db0/escyv_db.sql";

#here the script deletes all your tables in the database
mysql --user=$user --password=$password -h $server -BNe "SHOW TABLES" $database_name | tr '\n' ',' | sed -e 's/,$//' | awk '{print "SET FOREIGN_KEY_CHECKS = 0;DROP TABLE IF EXISTS " $1 ";SET
FOREIGN_KEY_CHECKS = 1;"}' | mysql --user=$user --password=$password -h $server $database_name;

echo "Base de datos limpiandose!";
echo "Restaurando Base de Datos..";

#here the script restores the database
mysql --user=$user --password=$password host=$server $database_name < $restore_file;

echo "Base de datos restaurada!";

我对其进行测试,将恢复文件 escyv_db.sql 的名称更改为 escyv_db1.sql 以查看站点是否显示错误,但显示数据库中的全部信息...所以我认为该命令没有任何作用。 .

对不起我的英语不好......不是我的母语

最好的问候!

安德烈斯

-----编辑----- 该脚本正在运行! 感谢@itsols

这是新的 restore_data.sh

#! /bin/sh
clear;

#here the script deletes all your tables in the database
mysql -u escyv -pky21m1 -e 'drop database escyv_cyv;'

echo "Base de datos limpiandose!";

mysql -u escyv -pky21m1 -e 'create database escyv_cyv;'

#here the script restores the database

mysql -u escyv_cyv -pky21m1 escyv_cyv < 0db0/escyv_db.sql

echo "Restaurando Base de Datos..";

echo "Base de datos restaurada!";

【问题讨论】:

  • 这是您自己的本地服务器还是托管的。如果它是第三方托管服务器,通常,除非您具有正确的权限,否则您无法执行数据库删除。创建数据库也是如此。这主要是出于安全原因。但我不确定这是不是你的情况。
  • 你好 @itsols 在 gator 中托管,我拥有特权,因为我可以压缩整个文件夹并备份数据库
  • DROP DATABASE 是单独的权限。
  • mmm.. 如果我有这个权限,我会要求支持...
  • gator 的支持告诉我,如果我有用户和数据库的通行证,我可以 DROP DATABASE

标签: php mysql cron sql-delete


【解决方案1】:

使用数据库需要一定的权限。因此,例如,您可以读取数据库,处理其中的记录并创建备份(通常是文本文件)。

但是,主要是出于安全原因,您没有权限使用主机授予的权限创建数据库或删除数据库。所以 gator 不太可能给你这个特权。

我建议您创建/删除用户标识的表的方法。这样,您可以限制对单个表的访问并仅备份那些特定表。例如,如果您有一个名为 X 的用户,您的表可以称为 tblXSomeTable。字母 tbl 后面的用户名,有助于识别 DB 的所有权。

【讨论】:

  • gator 的支持团队告诉我,如果我知道数据库的用户名和密码,我可以在 cron 作业中删除或创建等权限。这里以文字形式回答他们“如果你有数据库的 mysql 用户名和密码,你应该能够使用 cron 作业删除数据库。”
  • 检查这一点的一个好方法是简单地尝试通过 shell 脚本创建或删除 db 命令并直接运行它(而不是作为 cron),然后您可以确保它是否有效。或者,您可以尝试运行一个 php 程序,其中 drop db 使用 system/exec 完成。要直接测试脚本,您需要终端访问权限。
  • 你好,你能告诉我这个shell脚本是如何用drop数据库生成的吗?
  • 这是一个答案:stackoverflow.com/questions/2050581/… 但我怀疑这是否适用于您的实时主机,因为您无法获得该级别的权限。无论如何,请与您的房东再次确认。
  • 它的工作原理是删除我的整个数据库,这里是命令mysql -u escyv -pky21m1 -e 'drop database escyv_cyv;' 他们我用这个命令mysql -u escyv -pky21m1 -e 'create database escyv_cyv;' 创建数据库但是当我尝试将数据插入数据库时​​给我这个错误:/ home/escyv/restore_data.sh:第 13 行:/0db0/escyv_db.sql:没有这样的文件或目录,但该路径实际上是包含 sql 中所有数据的文件....
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多