MySQL主從結構實際中是用到最多的一種架構。 新上的兩台服務器B和C,要替換掉之前舊的服務器A,同時,B和C是新的主從關系。因此,配置成級聯復制,來遷移數據,也方便切換。
架構圖如下:
master A ------> slave B ------> slave C
有這么情況發生了,服務器B可以正常復制服務器A的數據,服務器B和C主從狀態Slave_IO_Running和Slave_SQL_Running都是yes的,但是服務器C卻無法復制新的數據。
原因分析:
1. 檢查服務器B有沒有開啟二進制日志log_bin
2. log_slave_updates是否啟用
log_slave_updates是將從服務器從主服務器收到的更新記入到從服務器自己的二進制日志文件中。
上面的問題是由於沒有啟用log_slave_updates = 1導致的。
總結:
因此,對於mysql級聯復制,上游的從服務器不僅僅要開啟log_bin還要開啟log_slave_updates,否則將導致下游的從服務器無法更新復制。
url" http://www.ttlsa.com/html/3481.html
---------------------------------------------------------------------
MySQL主從復制幾個重要的啟動選項
(1) log-slave-updates
log-slave-updates這個參數用來配置從服務器的更新是否寫入二進制日志,這個選項默認是不打開的,但是,如果這個從服務器B是 服務器A的從服務器,同時還作為服務器C的主服務器,那么就需要開發這個選項,這樣它的從服務器C才能獲得它的二進制日志進行同步操作
(2) master-connect-retry
master-connect-retry這個參數是用來設置在和主服務器連接丟失的時候,重試的時間間隔,默認是60秒
(3) read-only
read-only是用來限制普通用戶對從數據庫的更新操作,以確保從數據庫的安全性,不過如果是超級用戶依然可以對從數據庫進行更新操作
(4) slave-skip-errors
在復制過程中,由於各種的原因,從服務器可能會遇到執行BINLOG中的SQL出錯的情況,在默認情況下,服務器會停止復制進程,不再進行同步,等到用戶自行來處理。
Slave-skip-errors的作用就是用來定義復制過程中從服務器可以自動跳過的錯誤號,當復制過程中遇到定義的錯誤號,就可以自動跳過,直接執行后面的SQL語句。
--slave-skip-errors=[err1,err2,…….|ALL]
但必須注意的是,啟動這個參數,如果處理不當,很可能造成主從數據庫的數據不同步,在應用中需要根據實際情況,如果對數據完整性要求不是很嚴格,那么這個選項確實可以減輕維護的成本