從MySQL5.5開始鲸鹦,MySQL以插件的形式支持半同步復(fù)制斤富。如何理解半同步呢葵诈?首先我們來看看異步塑悼,全同步的概念
#異步復(fù)制(Asynchronous replication)
MySQL默認(rèn)的復(fù)制即是異步的劲适,主庫在執(zhí)行完客戶端提交的事務(wù)后會立即將結(jié)果返給給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理拢肆,這樣就會有一個問題减响,主如果crash掉了靖诗,此時主上已經(jīng)提交的事務(wù)可能并沒有傳到從上,如果此時支示,強(qiáng)行將從提升為主刊橘,可能導(dǎo)致新主上的數(shù)據(jù)不完整。
#全同步復(fù)制(Fully synchronous replication)
指當(dāng)主庫執(zhí)行完一個事務(wù)颂鸿,所有的從庫都執(zhí)行了該事務(wù)才返回給客戶端促绵。因?yàn)樾枰却袕膸靾?zhí)行完該事務(wù)才能返回,所以全同步復(fù)制的性能必然會收到嚴(yán)重的影響嘴纺。
#半同步復(fù)制(Semisynchronous replication)
介于異步復(fù)制和全同步復(fù)制之間败晴,主庫在執(zhí)行完客戶端提交的事務(wù)后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay log中才返回給客戶端栽渴。相對于異步復(fù)制尖坤,半同步復(fù)制提高了數(shù)據(jù)的安全性,同時它也造成了一定程度的延遲闲擦,這個延遲最少是一個TCP/IP往返的時間慢味。所以,半同步復(fù)制最好在低延時的網(wǎng)絡(luò)中使用墅冷。