簡體   English   中英

如何使用mysql中的事件定期進行數據庫腳本備份

[英]how to take periodically database script backup using event in 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 ;

嘗試過這個,但僅適用於單個表。我想要完整的數據庫腳本

您可以使用information_schema.tables表獲取數據庫中的表列表,並使用information_schema.columns表獲取列的列表(以防萬一您希望備份文件中包含列名)。

  1. 通過從數據庫獲取所有表名來創建游標
  2. 循環游標並將表名放入變量中
  3. 就像在當前代碼中一樣,將select ... into outfile ...構造select ... into outfile ...語句,只需從變量中添加表名即可。
  4. 執行准備好的語句。

如果要動態地將列名添加到輸出中,請結合來自SO主題的 Joe和matt的答案。

更新

對於視圖,存儲過程,函數和觸發器(就此而言,表)的問題是,您不能真正在sql中與show create ...語句的結果進行交互。 您可以嘗試從各自的information_schema表中重新創建它們的定義,但是據我所知,僅根據這些表就不可能完全重建每個對象。 您需要為此使用外部工具,例如mysqldump。 如果您想要一個完整的備份選項,那么,如果使用的是由OS的任務計划程序計划的外部工具,則情況會好得多。

由於表結構和其他數據庫對象不會經常更改(至少在生產環境中不會更改),因此您可以使用外部工具備份結構,並使用內部計划腳本定期備份內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM