MySQL中的多主+從複製
我一直在玩 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
Oct 09, 2013
:多主多從Jan 31, 2013
: MySQL 中的主從配置Feb 06, 2012
:將 3 Master + 1 Slave 轉換為 4 Master - 有什麼建議嗎?Dec 17, 2011
:> 2台機器上的Mysql Master-Master複製拓撲注意事項 #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
這樣的問題
Jul 06, 2012
: 通過共享伺服器 ID 搞砸了複製Dec 27, 2011
: Mysql 認為 Master & Slave 有相同的 server-idDec 07, 2011
: Master 和 Slave 有相同的 id只要 M1、M2、S1、S2 都有唯一的伺服器 ID,你應該沒有問題。