我现在正在努力使我的微型备份系统自动化。我设法收集了一些代码,但我无法做到。
SET @sql_text =
CONCAT (
"SELECT * FROM commandes INTO OUTFILE 'Y:/folder/Archives/BDD-commandes-CSV"
, DATE_FORMAT( NOW(), '%Y%m%d')
, "commandes.csv'"
);
PREPARE s1 FROM @sql_text;
CREATE EVENT BackUpCSV
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR
DO
BEGIN
EXECUTE s1;
END |
DROP PREPARE s1;
这是我试图做的。在第7行发现了一个错误,它实际上是一个空行('#1064 - 您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在#附近使用正确的语法39;'在第7行')
我很感激能得到这个帮助。 THX
答案 0 :(得分:1)
所有关于分隔符。这是可以编译的版本:
SET @sql_text =
CONCAT (
"SELECT * FROM commandes INTO OUTFILE 'Y:/folder/Archives/BDD-commandes-CSV"
, DATE_FORMAT( NOW(), '%Y%m%d')
, "commandes.csv'"
);
PREPARE s1 FROM @sql_text;
delimiter |
CREATE EVENT BackUpCSV
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR
DO
BEGIN
EXECUTE s1;
END |
delimiter ;
DROP PREPARE s1;
另外,我建议添加drop event if exists BackUpCSV |
PS。我不确定这个脚本是否可行
答案 1 :(得分:0)
为此目的,最好使用shell脚本或命令行。像这样:
#!/bin/bash
mysqldump --add-drop-table -h <hostname> -u <username> --password=<password> --all-databases > filename.sql
filename="filename.sql."`eval date +%Y%m%d`".tgz"
tar -czf $filename filename.sql
rm filename.sql
您可以将其保存到文件中,并将该文件作为cron作业运行。 如果您愿意,甚至可以将该存档文件推送到具有相同脚本的另一个系统。
当然,您应该了解在这种情况下,您将数据库凭据存储在普通文件中。但如果有人可以访问文件系统,我确信他/她会找到你完全相同的应用程序配置文件。