2010-02-24 18 views
3

當我運行下面的命令,輸出僅包含了「MYTABLE」的創建語法,但沒有數據:如何在不鎖定的情況下轉儲MySQL中的單個表?

mysqldump --single-transaction -umylogin -p mydatabase mytable > dump.sql 

如果我放棄--single事務,我得到一個錯誤,因爲我無法鎖定表格。

如果我刪除'mytable'(並執行數據庫),它看起來就是創建INSERT語句,但是整個數據庫非常龐大。

有沒有一種方法可以轉儲表 - 模式&數據 - 而不必鎖定表?

(我也試過INTO OUTFILE,但缺乏對於接入以及。)

回答

2

答案可能取決於你使用你的表的數據庫引擎。 InnoDB對非鎖定備份有一定的支持。鑑於您對權限的評論,您可能缺少必要的權限。

想到最好的選擇是創建一個沒有標記的重複表。將要備份的表中的所有數據複製到新表中。如果以可以輕鬆翻閱數據的方式創建查詢,則可以調整鎖的持續時間。我發現每次迭代10,000行通常非常快。一旦你有這個查詢,你可以繼續運行它,直到所有的行被複制。

既然你有一個重複的,你可以刪除它,截斷它,或保持它,並嘗試用最新的數據進行更新,並利用它作爲備份源。

雅各布

相關問題