即使使用 –lock-tables=false 在 mysqldump 期間寫入鎖
當我嘗試使用 轉儲線上數據庫
--lock-tables=false
時,其他人無法更新表。有什麼方法可以解決這個問題嗎?當我使用 MyISAM 時,
--single-transaction
對 InnoDB 有幫助嗎?此外,主從架構是處理備份線上數據庫的終極方法嗎?
謝謝!
您的問題:當我嘗試使用 轉儲線上數據庫
--lock-tables=false
時,其他人無法更新表。有什麼方法可以解決這個問題嗎?您需要了解為什麼其他人無法更新。使用 MyISAM,每個表在每次 INSERT、UPDATE 和 DELETE 時都會經歷一個全表鎖。使用 –lock-tables 將嘗試鎖定每個表,但會阻止在重讀環境中發出 SELECT。還有其他選擇。
您的問題:當我使用 MyISAM 時,
--single-transaction
對 InnoDB 有幫助嗎?InnoDB 是一個符合 ACID 的儲存引擎,可以在事務中更新和讀取數據。行級鎖定通常在 InnoDB 中發出,這允許其他人在備份表時讀取和寫入表。鑑於其全表鎖定協議,MyISAM 不允許這樣做。因此,MyISAM 根本沒有得到任何幫助
--single-transaction
。如果您創建的每個表都是 InnoDB,那麼您可以在正在執行的 master 上執行線上備份。您的問題:此外,主從架構是處理備份線上數據庫的最終方法嗎?
Master/Slave 確實使備份線上數據庫更容易,因為您在從屬伺服器上使用 mysqldump 執行備份,而 Master 繼續接受 INSERT、UPDATE 和 DELETE。此外,這允許進行允許時間點恢復的備份。您只需在從站上執行以下步驟:
STOP SLAVE;
- mysql轉儲
START SLAVE;
如果您在午夜在 Slave 上發出此消息,則數據會及時凍結。這樣,當您恢復 mysqldump 時,所有表都來自同一時間範圍。
旁注:您沒有義務將 Slave 上的所有表都轉換為 InnoDB。
如果所有表都是 InnoDB,則 using
single-transaction
將創建時間點備份,也可以作為 master。既然你有 MyISAM 表,那麼 Master-Slave 是理想的解決方案,不一定是終極解決方案。還有其他方法,但為了簡單起見:GO WITH MASTER-SLAVE !!!