寻觅生命中的那一片浅草......

每日存档 三月 5th, 2010

使用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 給註解起來純供參考用。

转载自:http://www.neo.com.tw/archives/1122

2010年三月
« 2月   4月 »
1234567
891011121314
15161718192021
22232425262728
293031