Mysql

MySQL中的多主+從複製

  • March 7, 2014

我一直在玩 MySQL,並嘗試根據下圖創建複製拓撲。從伺服器用作讀取伺服器,主伺服器用作讀取和寫入伺服器。

複製

問題是它不起作用。如果在其中一個主節點上進行了寫入,則另一個主節點不會將語句/行重新分配給它的從節點。

有什麼問題 ?我將不勝感激任何建議:)

問題

看著圖表,看到紅線,我立刻想到了缺少的一件事。

問題的根源在於兩個 master 都需要my.cnf. 為什麼 ?

當 master 從其中繼日誌中接收到 binlog event 時,如果它無法將 binlog event 記錄到其本地二進制 log 中,則它無法複製到任何其他 Slave。對於一個 MySQL 實例既是 Master 又是 Slave,它必須被允許將基於 Slave 的 binlog 事件記錄到它的 Binary Logs 中,以便其他 Slave 可以讀取相同的事件。

解決方案

您需要做的就是將其添加到每個大師的my.cnf

[mysqld]
log-slave-updates

並重新啟動mysqld。

試一試 !!!

警告 #1

我之前已經討論過這種情況下的 log-slave-updates

注意事項 #2

由於另一個原因,您需要調整圖表。藍色箭頭需要反轉。為什麼 ?

  • 在圖中,任何 DB Server 都可以有多個指向的箭頭,但只能有一個箭頭進入。這是由於 Slave 只有一個 Master。
  • MySQL Replication 只能從一個 Master 執行 CHANGE MASTER TO。

更新 2014-03-07 12:12 EST

在你上一條評論中,你說

大師 M1 和 M2 之間的更新呢?M1 和 M2 都是彼此的從屬。如果 M1 向 M2 發送更新。M2 會將相同的更新發送回 M1 嗎?它會永遠持續下去嗎?

是的,M2 會將相同的更新發送回 M1。

但是,更新不會在 M1 上再次執行。為什麼 ?

每個 binlog 事件和每個中繼日誌事件都包含事件的 server-id。這允許 MySQL Replication 對同時也是 Slave 的 Master 工作如下:

  • 伺服器看到中繼日誌事件

  • 伺服器檢查中繼日誌事件的 server-id

  • 如果中繼日誌事件的 server-id 與我的 server-id 相同,則不執行

  • 如果中繼日誌事件的 server-id 與我的 server-id 不同

    • 執行中繼日誌事件
    • 如果啟用了 log-slave-updates,則在本地 binlogs 中記錄中繼日誌事件

我以前討論過server-id這樣的問題

只要 M1、M2、S1、S2 都有唯一的伺服器 ID,你應該沒有問題。

引用自:https://dba.stackexchange.com/questions/60391