MySQL 配置參數 -- logs-slave-updates

logs-slave-updates 參數主要在多主多從的集羣架構中開啓,否則會導致各從實例無法完整同步集羣的全量數據的問題。

多主多從

集羣架構:

masterA → slaveA
↑ ↓
masterB → slaveB

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章