如何使用mysql中的事件定期进行数据库脚本备份

时间:2016-02-25 12:48:09

标签: mysql

我想每天使用mySql中的事件进行数据库脚本备份..我是mySql的新手,所以无法找到确切的解决方案..有人帮我这么做吗? 尝试使用mysqldump实用程序,但它是命令promt面向,我希望它只通过事件调度程序完成。

DELIMITER $$
create  EVENT `Backup` 
ON SCHEDULE EVERY 1 minute
STARTS '2016-02-25 17:08:06' ON COMPLETION  PRESERVE ENABLE 
DO 
BEGIN
SET @sql_text = CONCAT("SELECT * FROM purpleaid INTO OUTFILE '/C:/Users/Admin123/Desktop/db/" , DATE_FORMAT( NOW(), '%Y%m%d') , "db.csv'" ); 
PREPARE s1 FROM @sql_text; 
EXECUTE s1; 
DEALLOCATE PREPARE s1;
END $$
DELIMITER ;

尝试了这个,但它只用于单个表。我想要完整的数据库脚本

1 个答案:

答案 0 :(得分:0)

您可以使用information_schema.tables表来获取数据库中的表列表,使用information_schema.columns表来获取列列表(以防您希望在备份文件中包含列名)。

  1. 通过获取数据库中的所有表名来创建cursor
  2. 循环游标并将表名称转换为变量
  3. 按照与当前代码相同的方式构建select ... into outfile ...语句,只需添加变量中的表名。
  4. 执行准备好的陈述。
  5. 如果要将列名动态添加到输出中,请将{3&'的来自this SO topic的答案组合起来。

    更新

    对于视图,存储过程,函数和触发器(以及表格),问题在于您无法真正与sql中的show create ...语句结果进行交互。您可以尝试从各自的information_schema tables重新创建它们的定义,但据我所知,不可能仅基于这些表完全重建每个对象。您需要使用外部工具,例如mysqldump。如果你想要一个完整的备份选项,那么如果你使用了由操作系统的任务调度程序安排的外部工具,你会好得多。

    由于表结构和其他数据库对象不会经常更改(至少不在生产中),因此您可以使用外部工具备份结构并使用内部计划脚本定期备份内容。