標籤:mysql;鏈式複製;
最近項目中有用到雙主雙從結構的mysql 配置。按平常預設配置, 測試資料不一致。 查資料鏈式數制需要開啟log-slave-updates 選項 ,即通常情況,從伺服器從主伺服器接收到的更新不記入它的二進位日誌,開戶log-slave-updates選項從伺服器將其SQL線程執行的更新記入到從伺服器自己的二進位日誌。
我的配置是雙主, 然後每個主還有一台從機,
令名稱為: M1 M2 S1 S2
M1,M2 是雙master 配置, S1是M1的從機 ,S2是M2的從機。
邏輯上, 如果從M2上寫入, M1為從,S1就是M1的從。 M2->M1->S1 ,另一個同理。
根據上面的資訊,配置時M1,M2都要開啟log-slave-updates
參考資料:
--logs-slave-updates
通常情況,從伺服器從主伺服器接收到的更新不記入它的二進位日誌。該選項告訴從伺服器將其SQL線程執行的更新記入到從伺服器自己的二進位日誌。為了使該選項生效,還必須用--logs-bin選項啟動從伺服器以啟用二進位日誌。如果想要應用鏈式複製伺服器,應使用--logs-slave-updates。例如,可能你想要這樣設定:
A -> B -> C
也就是說,A為從伺服器B的主伺服器,B為從伺服器C的主伺服器。為了能工作,B必須既為主伺服器又為從伺服器。你必須用--logs-bin啟動A和B以啟用二進位日誌,並且用--logs-slave-updates選項啟動B。
以上是摘自mysql對於logs-slave-updates啟動選項的描述。
當然logs-slave-upates也可以寫入my.cnf :
//////////////////
log_slave_updates=1
//////////////////
當然在這種機制下可能有的同學會存在這麼個問題:
如果a->b b->a 這樣的雙master架構下,a,b都開啟log_slave_updates選項會不會出現無限迴圈的狀態。
mysql已經考濾到了這個問題,每條bin-log都會記錄執行語句的源server_id.當slave讀到語句的server_id等於本身的ID的時候,不會忽略執行,所以我們不用擔心a,b會不會無限迴圈下去。
基於以上這種情況,mysql的replication叢集將更加靈活,你如果需要可以做成各種各樣的鏈式複製。比如 a->b b->a b中設定log_slave_updates後還可以b->c. 這樣a,c中的資料也是一致的。
在一個master A上記錄開啟log_slave_updates = 1,這樣它機會記錄自己的binlog也會記錄來自master B的binlog(預設不記錄),這樣slave change master to masterA就相當於是masterA和masterB兩個master的slave了
本文出自 “willard_SA” 部落格,請務必保留此出處http://374400.blog.51cto.com/364400/1545053
mysql 鏈式複製