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
再全量同步其他主實例的數據,但相對麻煩些。