mysql主從同步原理


mysql主從同步過程:
mysql的主從復制主要有三個線程:master:二進制日志轉儲線程(binlog dump thread)、slave:I/O線程(I/O thread)和SQL線程(SQL thread).master一條線程和slave中的兩條線程。

  • 主節點binlog,主從復制的基礎是主庫將數據庫的所有變更記錄到binlog,實際上主從同步的原理就是基於binlog進行數據同步的。
  • 主節點二進制日志轉儲線程(log dump),當binlog有變動時,log dump線程讀取其內容並發送給從節點
  • 從節點I/O線程,接受binlog內容(這里是數據更新的部分),並將其拷貝到本地形成中繼日志(Relay log)
  • 從節點SQL線程讀取relay log 文件內容對數據更新進行重放,最終保證主從數據庫一致性。
    注:主節點使用binlog文件 + position偏移量來定義主從同步的位置,從節點會保存其已接受到的偏移量,如果從節點發生宕機重啟,則會自動從position的位置發起同步

由於mysql默認的復制方式是異步的,主庫把日志發送給從庫后不關心從庫是否已經處理,這樣會產生一個問題就是假設主庫掛了,從庫處理失敗,這時候從庫升級為主庫后,日志就丟失了。

全同步復制:主庫寫入binlog后強制同步日志到從庫,所有的從庫執行完成之后長才返回給客戶端,但是這樣性能就會收到嚴重影響。
半同步復制:和全同步復制不同的是,半同步復制是從庫寫入日志成功返回ACK確認給主庫,主庫收到至少一個從庫的確認就認為寫操作完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM