簡介
MySQL通過復制(Replication)實現(xiàn)存儲系統(tǒng)的高可用。目前,MySQL支持的復制方式有:
本文主要討論MySQL半同步復制。
半同步復制的基本流程
MySQL半同步復制的實現(xiàn)是建立在MySQL異步復制的基礎上的。MySQL支持兩種略有不同的半同步復制:AFTER_SYNC和AFTER_COMMIT(受rpl_semi_sync_master_wait_wait_point控制)。
開啟半同步復制時,Master在返回之前會等待Slave的響應或超時。當Slave超時時,半同步復制退化成異步復制。這也是MySQL半同步復制存在的一個問題。本文不討論Salve超時的情形(不討論異步復制)。
半同步復制AFTER_SYNC模式的基本流程
AFTER_SYNC模式是MySQL 5.7才支持的半同步復制方式,也是MySQL5.7默認的半同步復制方式:
Prepare the transaction in the storage engine(s).半同步復制AFTER_COMMIT模式的基本流程
MySQL 5.5和5.6的半同步復制只支持AFTER_COMMIT:
Prepare the transaction in the storage engine(s).AFTER_SYNC和AFTER_COMMIT兩種方式的小結(jié)
AFTER_SYNC: 日志復制到Slave之后,Master再commit。
所有在master上commit的事務都已經(jīng)復制到slave。
所有已經(jīng)復制到slave的事務在master不一定commit了(比如,master將日志復制到slave之后,在commit之前宕機了)
AFTER_COMMIT:Master commit之后再將日志復制到Slave。
所有master上commit的事務不一定復制到slave。(比如,master commit之后,還沒來得及將日志復制到slave就宕機了)
所有已經(jīng)復制到slave的事務在master上一定commit了。
很明顯,AFTER_COMMIT在master宕機的情況下,無法保證數(shù)據(jù)的一致性(master commit之后,還沒來得及將日志復制到slave就宕機了)。本文接下來只討論AFTER_SYNC模式。
MySQL5.7.3開始支持配置半同步復制等待Slave應答的個數(shù):rpl_semi_sync_master_wait_slave_count 。            
新聞熱點
疑難解答
圖片精選