0

我需要知道如何使用 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!";
4

1 回答 1

0

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

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

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

于 2013-08-02T17:45:42.180 回答