首頁  >  文章  >  資料庫  >  當mysqldump --single-transaction遇到alter table怎麼辦?

當mysqldump --single-transaction遇到alter table怎麼辦?

零下一度
零下一度原創
2017-07-27 16:46:511523瀏覽

測試環境:

MySQL 5.5.14

在資料庫testdb01下有表格tb1001,目前表格中存有兩個資料:

##========================================= ================

##發現竟然回傳的是空集,沒有任何報錯。

這也合理地解釋我同事操作的現象:在mysqldump過程中,修改表結構,修改操作沒有被阻塞,mysqldump操作也」正常完成「。

由於SELECT /*!40001 SQL_NO_CACHE */ * FROM `tb1001`操作沒有返回錯誤也沒有返回數據,mysqldump進程會將tb1001當做一個空表來處理,然後繼續導出後面的表直至導出所有的表然後返回執行成功的狀態。但導出的備份已經缺失tb1001的數據,如果恰好採用該備份去恢復數據,那麼必然最終導致「數據丟失」。

解決方法:

在對MySQL 5.5版本進行修改表格操作前,先檢查目前伺服器是否正在進行mysqldump操作,避免兩者並行執行。

如果對mysqldump已經匯出過的表進行修改操作,修改操作會被阻塞,直到mysqldump結束,情況與MySQL 5.6版本一致。

總結:

對於MySQL 5.5版本,mysqldump與表修改操作同時執行:

如果修改表操作在」mysqldump開啟後但還未匯出修改表資料前「的時間段內開始,則修改表操作成功完成,而mysqldump不會執行失敗,但是無法正常匯出修改表的資料;

如果修改表操作在「mysqldum已匯出修改表資料但還未結束mysqldump操作前」的時間段內開始,則修改表操作被阻塞,mysqldum能成功完成,在mysqldump操作完成後修改表操作方可正常執行。

對於MySQL 5.5版本,應該避免mysqldump和修改表操作同時進行,以避免備份丟失修改表的數據,造成數據不一致!

以上是當mysqldump --single-transaction遇到alter table怎麼辦?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn