查漏補缺(六):Mysql主從複製

Mysql的主從複製是通過binary-log(bin log)的二進制日誌來實現的。流程是這樣的:
因爲Mysql主從模式是一種讀寫分離的模式嘛,所以當客戶端在主服務器提交一個事務後,對應的操作會同步到binary log上,然後主服務器開啓一個叫做log dump的線程,用來向從服務器發送這個binary log,還有一個binary position,用來指示這次複製的開始位置。從服務器會開啓兩個線程,一個是IO線程,用來接受主服務器傳播過來的binary log,同時寫在一個叫做relay log的中繼日誌中,還有一個線程是SQL線程,它的主要任務是對relay log進行解析,轉化爲對應的sql語句,然後逐條執行。以此來完成主從同步。
Mysql的主從複製模式有三種

  • 異步模式
  • 半同步模式
  • 全同步模式

異步模式是默認的模式,主服務器向從服務器發送binary log,它無需得到從服務器的確認,只要發送完了就直接返回,響應客戶端。這種方法速度最快,但是主從複製出錯的概率也最高,因爲它沒有任何確認機制。

半同步模式,主服務器向從服務器發送binary log,從服務器成功接受到之後,還需要發回一個確認信號,主服務器接受到確認信號之後,纔會返回並響應客戶端。如果等待一個超時時間還沒有得到確認信號,那麼主服務器會使用異步模式重新發送。這種方法進一步保障了主從複製的成功,但是犧牲了響應時間。並且也並不保證能複製成功,因爲它只保證從服務器成功接受到binary log,而不保證從服務器能成功完成sql語句的執行

全同步模式,主服務器向從服務器發送binary log,從服務器接受到,並且執行完響應的命令並提交後,發送一個確認信號,主服務器接受到確認信號,然後響應客戶端。這種方法可以保證主從複製的成功,但是嚴重犧牲了響應時間,所以用得比較少。

要想做到更高級別的數據一致性的話,可以考慮使用數據庫中間件,當一個數據被更新之後,在一段時間內,對這個數據的讀操作要落在主服務器上,因爲這段時間主從可能還未完成同步,直接去從服務器讀可能會造成主從不一致。這種方法雖然能保證高級別的數據一致性,但是破壞了讀寫分離的原則,加大主服務器的壓力。具體就要結合場景進行舍取了。

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