MySQL 配置引數 -- logs-slave-updates
logs-slave-updates
引數主要在多主多從
的叢集架構中開啟
,否則會導致各從例項
無法完整同步叢集的全量資料的問題。
多主多從
叢集架構:
masterA → slaveA
↑ ↓
masterB → slaveB
logs-slave-updates
:Normally, a slave does not log to its own binary log any updates that are received from a master server. This option tells the slave to log the updates performed by its SQL thread to its own binary log.
即,正常情況下,一個slave
節點是不會將其從master
節點同步的資料更新操作記錄至自己的二進位制日誌bin-log
中的。
在多主的場景下,各master節點
其實又相互作為另一方的slave節點
進行著資料的一致性同步操作。例如masterA
會以slave
的角色同步masterB
上的資料,masterB
也會以slave
的角色同步masterA
上的資料,如果沒有開啟logs-slave-updates
引數配置,則masterA
\masterB
雖然也能保證資料的一致性和完整性,但二者的bin-log
中都只記錄了作用在自身例項上的資料更新操作。
例如:
masterA insert row1 bin-logA add row1
masterB insert row2 bin-logB add row2
masterA replicate row2 from masterB But bin-logA will not log this update
masterB replicate row1 from masterA But bin-logB will not log this update
slaveA replicate row1 form bin-logA
slaveB replicate row2 form bin-logB
因為主從複製是使用bin-log
完成的,masterA
masterB
互補同步資料時並沒有從對方同步的資料寫入自己的bin-log
,則會導致自己的從例項只能同步到叢集的部分資料。
多從一從
在多主一從模式下,logs-slave-updates
就沒那麼必須了,各主例項只需維護好自身的bin-log
,從例項則分別讀取各主例項的bin-log
彙總叢集的全量資料,還可以一定層度上提高叢集效能。
但為了保證容災恢復,還是要儘可能的保證logs-slave-updates
的開啟,否則每臺主例項都只有自身資料更新的bin-log
,都只能恢復叢集資料的一部分,雖然也可以只恢復各自的bin-log
再全量同步其他主例項的資料,但相對麻煩些。