[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 即時備份的新選擇

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar