MySQL - 備份期間避免表鎖

MySQL - 備份期間避免表鎖

我正在使用 mysqldump 在我的伺服器上運行夜間備份。不幸的是,這幾乎每天晚上都會使我的網站癱瘓半小時左右,因為表在備份期間被鎖定。

根據進程列表,有時對不相關表的查詢似乎會被阻塞,例如「INSERT INTO A」處於鎖定狀態幾分鐘,而唯一正在執行的查詢僅涉及表 B。

有沒有更好的方法來進行這樣的備份?

答案1

您有兩個選擇:

A. 使用--skip-lock-tablesmysqldump 選項。您的表不會被鎖定,但您的備份可能不一致(取決於您的架構:如果您的資料庫交易同時觸及多個表,並且一個表已備份,而另一個表尚未備份。例如:兩個表:customers如果先備份客戶,然後插入新的客戶/訂單對,則您最終可能會得到備份中沒有客戶的訂單)。

這個問題是 mysqldump 預設鎖定所有表的主要原因。如果這個問題不適用於您,跳過 mysql 中的表格鎖定是最簡單的解決方案。

B. 使用其他備份方法。例如:使用讀鎖刷新表、建立 LVM 快照、解鎖表、掛載 LVM 快照並備份資料。這會變得很快,比簡單的 mysqldump 複雜得多。谷歌“mysql backups with LVM snapshots”,有很多腳本和教程可用。

如果你的MySQL資料不在LVM磁碟區上,你可以建立一個MySQL從伺服器並備份它,而無需接觸主伺服器,因此鎖定發生在從伺服器上,而主伺服器總是空閒的。

相關內容