1. 程式人生 > >MySQL主從復制半同步復制原理及搭建

MySQL主從復制半同步復制原理及搭建

至少 但是 mysql5 ima 調整 width 一個 事務 完整

在MySQL5.5之前的版本中,MySQL的復制是異步復制,主庫和從庫的數據之間存在一定的延遲,比如網絡故障等各種原因,這樣子容易存在隱患就是:當在主庫寫入一個事務成功後並提交了,但是由於從庫延遲沒有及時得到主庫推送的Binlog日誌時,主庫突然宕機了,那麽此時從庫就可能損失這個事務,從而造成主從不一致的狀況。

因此我們MySQL5.5版本之後引入了半同步復制的概念

半同步復制的原理:

半同步復制時,為了保證主庫上的每一個Binlog事務都能夠被可靠的復制到從庫上,主庫在每次事務成功提交時,並不及時反饋給前端應用用戶,而是等待其中的一個從庫也接收到Binlog事務並成功寫入中繼日誌後,出庫才返回commit操作成功給客戶端。半同步復制保證了事務成功提交後,至少有兩份日誌記錄,一份在主庫的Binlog日誌上,另一份在至少一個從庫的中繼日誌Relay log上,從而更近一步保證了數據的完整性。

技術分享圖片

這個示意圖是半同步復制的步驟:

在這個半同步復制模式下:第1、2、3中任何一個步驟中主庫宕機,則事務並沒有提交成功。從庫也沒有得到日誌,此時的主從復制數據是一致的。

那什麽時候半同步復制會突然變成異步復制呢?

  在第4步的時候,如果網絡延遲故障或從庫宕機,那麽此時主庫的Binlog都沒有及時傳送給從庫上,此時主庫上的事務會等待一段時間,時間長短由參數rpl_semi_master_timeout設置的毫秒數來決定,如果Binlog在這段時間內都無法成功推送到從庫上,則MySQL自動調整復制模式為異步模式,此時事務正常返回提交結果給客戶端。

MySQL主從復制半同步復制原理及搭建