Neo's Blog

首頁 相本 討論 書籤

分類目錄
本站日誌 (51)
碎碎唸啦 (173)
網站架設 (84)
程式設計 (161)
軟體使用 (69)
電子商務 (126)
經營奇想 (48)
基金理財 (11)
聰明消費 (87)
電影心得 (47)
開放原碼 (16)
工作記錄 (2)
毛毛小記 (9)
就是不同 (2)




歷史資料
 




December 14, 2007
[MySQL] 使用 mysqldump 線上備份 InnoDB

mysqldump 做線上即時備份,通常 InnoDB 的資料只有出現1~2筆,如果要儘可能把完整的資料匯出,可以加上 --single-transaction,備份前 mysqldump 會先執行 BEGIN ,取得 READ LOCK 後,便能確定資料在執行 mysqldump 的過程中不會受到其它連線對 InnoDB 存取的干擾,也能 Dump 出較完整的資料。(使用此參數需有 READ LOCK 權限)

mysqldump --single-transaction --all-databases > all_db.sql

注意:
1.表單較大時可以加上 --quick
2.MySQL Cluster 不支援 --single-transaction

然而使用 --single-transaction 時最好搭配 --flush-logs--master-data 來維持 Binary Log 的完整性。(使用這二個參數皆需有 RELOAD 權限)

mysqldump --single-transaction --flush-logs --master-data --all-databases > all_db.sql

Binary Log 採用的是遞增備份,--flush-logs 便是把目前的 Binary Log 給 flush 出來 (若目前 MASTER_LOG_FILE 已經到 mysql-bin.000005,產生出來的檔案便是 mysql-bin.000006),完成之後才進行 Dump 的作業。

而 --master-data (預設值為1) 則是在 Dump 出來的 SQL 語法中加入下面這一行,以記錄目前 Dump 的時間點。

CHANGE MASTER TO MASTER_LOG_FILE=mysql-bin.000006',MASTER_LOG_POS=4;

如果在未來執行匯入時 SQL 語法時, MySQL 便能很清楚的知道這次 Dump 出來的 SQL 在 Binary Log 中是屬於哪個位置。

註: 若不需理會 Binary Log 的位置時 (例如進行完整備份作業),只要將 --master-data 設為 2 便會將 CHANGE MASTER 給註解起來純供參考用。

延伸閱讀:
Example Backup and Recovery Strategy
MySQL 資料庫災難復原 (使用 Binary Log)
SELECT ... INTO OUTFILE 只能復原備份主機的資料
(檔案無法在另一台機器上使用)

相關文章:
ZRM for MySQL 即時備份的新選擇

 
由 Neo 發表於 December 14, 2007 07:45 PM 收進你的MyShare個人書籤  

發表迴響  
(*星號開頭為必填欄位)











(請輸入您看到的數字,看不到請按右鍵->顯示圖片)


記住我的資訊?







Copyright 2005 Neo's Blog All rights reserved.