[MySQL] 使用 mysqldump備份 DB

用 mysqldump 做備份,如果要儘可能把完整的資料匯出,可以加上 --single-transaction,備份前 mysqldump 會先執行 BEGIN ,取得 READ LOCK 後,便能確定資料在執行 mysqldump 的過程中不會受到其它連線存取的干擾,也能 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 給註解起來純供參考用。

 

創作者介紹

Matt 隨筆

mic1491 發表在 痞客邦 PIXNET 留言(0) 人氣()