更改 2 個目前複製從站的複製方案的最佳方法是什麼?

更改 2 個目前複製從站的複製方案的最佳方法是什麼?

我在生產環境中設定了 MySQL 複製,如下所示:

DB1 -> DB2
DB1 -> 比克

哪裡DB2BAK是 的奴隸DB1。所有 3 個伺服器都是同步的(比主伺服器慢 0 秒)並且擁有 30+ GB 的資料。

我想將伺服器置於新的主從配置中,如下所示:

DB1 -> DB2 -> 巴克

更改主主機的最佳方法是什麼BAK

有沒有辦法避免必須停止從屬線程DB2並獲取 mysqldump BAK(5-6 小時的進程)?

答案1

他們稱之為主-從-從級聯複製。您需要在 DB2 上啟用 log-bin 和 log-slave-updates,請參閱此處:

http://dev.mysql.com/doc/refman/5.0/en/replication-options-slave.html#option_mysqld_log-slave-updates

一旦在 BD2 上運行,在 BAK 上您需要更改主設備並重置從設備以刷新其日誌訊息,ala:

mysql> stop slave;
mysql> change master to MASTER_HOST="BAK name or IP", .....
mysql> reset slave;
mysql> start slave

其中“...”是通常的選項:http://dev.mysql.com/doc/refman/5.0/en/change-master-to.html

理論上,這應該為您完成,而無需創建新的轉儲並導入它——如果您願意,我會確保在主伺服器上運行刷新日誌並備份 BAK,以防在獲取日誌時出現問題位置錯誤或者類似的...

答案2

正如你所說,轉儲和導入可能需要很長時間。更好的選擇是使用額外備份,這將按照將檔案複製到位的速度進行恢復。我在部落格上介紹了它不久以前。我發現這是設定奴隸的完美方式,非常快速且簡單。備份需要很長時間,但恢復速度非常快。我也強烈建議你使用豬豬如果您要壓縮備份,請不要使用 gzip - 它很容易使我的備份時間縮短 4 倍。

如果您可以安排同時停止兩個從屬伺服器(因此它們都指向 db1 上的相同日誌和位置),例如透過暫時停止 DB1,那麼您可以使用其主資訊安全地在 DB2 上重新指向 BAK,而無需進行長時間的恢復。正如 troyengel 所說,最重要的是您需要 log-slave-updates 來進行中繼,否則只有源自 DB2 的語句才會傳送到 BAK。

我還建議您將 DB2 設定為唯讀。這不會影響複製,但更安全,因為您最終不會得到 DB2 和 BAK 上不屬於 DB1 的資料。

相關內容