移動 MySQL 主控
我目前有一個主數據庫伺服器(我們稱之為 db1)和 6 個從屬伺服器(slave1-6)。我已經設置了一個新伺服器(db2)作為 db1 的從屬伺服器,並且它是同步的。我想將所有從站更改為使用 db2 而不是 db1,但停機時間/數據失去最少。
目前我能想到的唯一方法是關閉我們的網站(因此數據停止寫入 db1),等到所有從屬設備都是最新的,刷新 db1 上的日誌,然後關閉它。在 db2 上重置 master,將所有 slave 更改為指向 db2,日誌位置 = 0。
這是正確的方法,還是有一種方法可以在不使網站離線的情況下做到這一點?
有點不清楚您是否正在移動應用程序以寫入 db2,但您可以在系統執行時重新控制從屬伺服器以從 db2 複製。
我過去處理這個問題的方式是:
1)在奴隸上停止奴隸
$$ 1-6 $$ 2) 停止 db2 上的從站。請注意,它是 db1 的從屬文件/位置資訊(Master_Log_File 和 Exec_Master_Log_Pos),它是主日誌位置(顯示主狀態)。
- 在奴隸上
$$ 1-6 $$, ‘啟動slave直到master_log_file = $ file, master_log_pos = $ 位置’。這些是來自上面的從站資訊((Master_Log_File 和 Exec_Master_Log_Pos)的位置。 4)此時驗證從
$$ 1-6 $$和 db2 在“顯示從屬狀態”中相對於它們的主 db1 具有相同的複制位置。 5)在奴隸上停止奴隸
$$ 1-6 $$ 6)在奴隸上改變主人
$$ 1-6 $$. 新的 master_log_file 和 master_log_pos 值是您在第 2 步中從 db2 上的“顯示主狀態”中獲得的資訊。 7) 在從機上啟動從機
$$ 1-6 $$. 請注意,此方法會導致所有從屬數據庫上的複製過時。如果手動完成,這應該是幾分鐘,或者您可以編寫腳本並將其推到幾秒鐘內。如果您的站點由於複製延遲而不能容忍任何過時的數據,那麼您將不得不以不同的方式完成這項工作。
您還應該確保 db2 已打開 log-slave-updates,否則它將無法正確地將語句從其主伺服器複製到其從伺服器。
祝你好運!