Mysql

主從半循環複製在 MySQL 中不起作用

  • January 2, 2017

我不知道如何描述它,所以我稱它為半圓。這就是我正在做的事情。

伺服器 A

伺服器 B = 這是伺服器 A 的從伺服器

伺服器 C = 這是伺服器 B 的從伺服器

當我在伺服器 A 上更新某些內容時,它會反映在伺服器 B 上。但同樣的更改不會反映在伺服器 C 上。

只有當我在伺服器 B 上更新某些內容時,更改才會反映在伺服器 C 上。

我如何做到這一點,以便在伺服器 A 上所做的任何更改都會到達伺服器 B(它已經在工作),然後它會到達伺服器 C?

編輯

經過調查,我發現當我在伺服器 A 上進行一些更改時,它的日誌文件位置會發生變化。但是當這些更改反映在伺服器 B 上時,伺服器 B 日誌文件的位置不會改變。正是由於這個原因,伺服器 C 不知道伺服器 B 上是否有任何更改,除非我明確更改伺服器 B 上的某些內容(插入、更新、刪除)。

那麼有沒有辦法告訴 MySQL 在 Slave 接收來自 Master 的更新時增加日誌文件位置?

僅供參考——這通常稱為複制中繼鏈。為了打開它,您必須確保在伺服器 B 上設置了以下設置:

log_bin
log_slave_updates

這將告訴伺服器 B 在收到來自 A 的更新時更新其日誌位置。可以在此處找到相關文件(重點添加):

通常,從屬伺服器不會將從主伺服器接收到的任何更新寫入其自己的二進制日誌。此選項使從伺服器將其 SQL 執行緒執行的更新寫入其自己的二進制日誌。要使此選項生效,還必須使用**–log-bin選項啟動從屬伺服器以啟用二進制日誌記錄。–log-slave-updates 用於連結複製伺服器時。**例如,您可能希望使用這種安排設置複製伺服器

A -> B -> C

這裡,A 充當從 B 的主,B 充當從 C 的主。為此,B 必須既是主又是從。您必須使用**–log-bin啟動 A 和 B以啟用二進制日誌記錄,並使用–log-slave-updates**選項啟動 B 以便從 A 接收的更新由 B 記錄到其二進制日誌中。

引用自:https://serverfault.com/questions/823621