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

MySQL主從複製半同步複製原理及搭建

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

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

半同步複製的原理:

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

這個示意圖是半同步複製的步驟:

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

那什麼時候半同步複製會突然變成非同步複製呢?

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