-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;

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 服务器版本相对应的手册,以在第 7 行的 '' 附近使用正确的语法')

我会很感激能得到这个帮助。谢谢

4

2 回答 2

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 |

附言。我不确定这个脚本是否有效

于 2012-10-16T17:36:31.517 回答
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 作业运行。如果您愿意,您甚至可以将该存档文件推送到具有相同脚本的另一个系统。

当然,您应该明白,在这种情况下,您将数据库凭据存储在一个普通文件中。但是,如果有人可以访问文件系统,我相信他/她会找到您的应用程序配置文件,而您的操作完全相同。

于 2012-10-16T17:44:51.297 回答