Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL计划事件:数据库备份,包括输出文件中的日期_Mysql_Events_Date Format - Fatal编程技术网

MySQL计划事件:数据库备份,包括输出文件中的日期

MySQL计划事件:数据库备份,包括输出文件中的日期,mysql,events,date-format,Mysql,Events,Date Format,我现在正在努力使我的微型备份系统自动化。我设法收集了一些代码,但我做不到 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 Ba

我现在正在努力使我的微型备份系统自动化。我设法收集了一些代码,但我做不到

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行的“”附近使用的正确语法”)


如果能得到这样的帮助,我将不胜感激。thx

关于定界符有很多。以下是可以编译的版本:

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;
此外,如果存在备份CSV,我建议添加
drop事件|


另外,我不确定这个脚本是否能正常工作。为此,最好使用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 
#/bin/bash
mysqldump--add drop table-h-u--password=--all databases>filename.sql
filename=“filename.sql”。`eval date+%Y%m%d`.tgz“
tar-czf$filename.sql
rm filename.sql
您可以将其保存到文件中,并将该文件作为cron作业运行。 如果需要,您甚至可以使用相同的脚本将该归档文件推送到另一个系统


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

太棒了,我不知道delimiter。我会进一步检查这一点,尽管你的脚本对我来说运行良好。好吧,当我在SQL textaera(phpmyadmin)中编写此脚本时,它基本上添加了一个事件,但该事件不起作用:正如我之前告诉你的,“我不确定此脚本是否能起作用”。您需要在事件中封装逻辑,而不是使用prepared语句进行奇怪的操作。我只是想避免cron作业,因为我在本地工作。但thanx,这有时可能会有帮助:)