創建主從關係時避免伺服器停機的方法?
我正在準備建立一個MySQL主從或主主關係。現在我有一個 MySQL 生產伺服器,當然我不希望在連接從屬伺服器時有很多停機時間。
有沒有辦法我可以連接一個空的從站並讓它“慢慢地”同步來自主站的數據,直到它們相同?
我注意到我可以在主伺服器上使用 mysqldump 進行事務轉儲,然後將其導入從伺服器,但是當從伺服器導入轉儲時,將寫入很多新行,從伺服器如何獲取這些?
我希望我在這裡遺漏了一些明顯的東西,但是廣泛的Google搜尋給出了這樣的建議,例如“因為這將導致未來的停機時間減少,現在一些停機時間也許並不是一件壞事”。但我真的很想避免這種情況。
MyISAM 的相關問題,但我使用 InnoDB。
如果您使用的是 100% InnoDB,那麼您很幸運。您可以使用XtraBackup對您的主數據庫進行完整備份,而無需任何停機或任何表鎖定。
FLUSH TABLES WITH READ LOCK
這將是一致的快照式備份,與執行or--master-data
選項時獲得的排序相同。XtraBackup 工具還會在備份目錄中刪除一個額外的文件,其中包含您在從站上開始複製所需的 MASTER_LOG_POS 和 MASTER_LOG_FILE 資訊。
完成備份後,您需要
--prepare
在備份上執行 XtraBackup 的選項,將其載入到從屬伺服器,啟動從屬 MySQL 程序備份並告訴它它需要的新 MASTER_LOG_POS 和 MASTER_LOG_FILE 值。
skip-slave-start
在啟動奴隸之前,您需要在 my.cnf 中。還要記住,
mysql
預設情況下模式是 MyISAM(如果記憶體服務正確,它只能是 MyISAM),所以在執行備份時您仍然必須小心不要對這些表中的任何一個進行任何更改。只要您遵守該規則,主資訊仍然是正確的。忽略從屬伺服器上
mysql
my.cnf 中的模式通常是個好主意,並且只創建具有 SELECT 權限的使用者。即使使用 Percona(和之前的 Maatkit)為此提供的工具,不一致和不同步的 slave 也很難檢測到並且處理起來很痛苦。編輯:
儘管您說您使用的是 InnoDB,但為了完整起見,如果您使用的是 MyISAM 表,還有另一種方法。如果您有一個帶有快照的捲管理器(例如ZFS或LVM),您可以執行 a
FLUSH TABLES WITH READ LOCK
後跟 aSHOW MASTER STATUS
,創建一個快照並執行UNLOCK TABLES
. 停機時間應該相當短。作為比較,昨晚執行此操作以備份我們的一個數據庫的 cron 作業需要 6 秒來創建快照,這是數據庫“關閉”的位置,並且需要 27 分鐘來將文件從快照複製到備份伺服器。