Mysql復(fù)制
異步
邏輯
MySQL 默認(rèn)的復(fù)制就是異步的,主庫再執(zhí)行完客戶端提交的事務(wù)后會立即將結(jié)果返回給客戶端,并不關(guān)系從庫是否已經(jīng)接收和處理。
技術(shù)實現(xiàn)
MySQL主庫將Binlog事件寫入到Binlog文件中,此時主庫只通知一下Dump線程發(fā)送這些新的Binlog,然后主庫繼續(xù)處理提交操作,不會保證這些Binlog傳到任何一個從庫節(jié)點上。
缺點
因為異步復(fù)制,主節(jié)點不關(guān)從節(jié)點是否收到Binlog,如果主crash掉了,此時主節(jié)點上已提交的事務(wù)可能并沒有傳到從庫上,如果此時,強(qiáng)行將從節(jié)點提升為主節(jié)點,可能導(dǎo)致新的主節(jié)點上數(shù)據(jù)不完整。
全同步
邏輯
全同步是指當(dāng)主庫接收到客戶端的一個事務(wù)請求,所有的從庫都執(zhí)行了該事務(wù)才返回給客戶端。
技術(shù)實現(xiàn)
當(dāng)主庫收到客戶端提交的事務(wù)后,所有的從庫必須收到并且執(zhí)行事務(wù),然后主庫才會執(zhí)行后續(xù)操作。
缺點
因為要等待所有從庫執(zhí)行完事務(wù),主庫才將結(jié)果返回給客戶端,所以全同步復(fù)制的性能必然受到嚴(yán)重影響,即完成一個事務(wù)的時間被拉長,性能降低。
半同步
邏輯
半同步復(fù)制是介于全同步復(fù)制和全異步復(fù)制之間的一種,主庫只需要等待至少一個從庫節(jié)點收到并Flush Binlog到Relay log文件即可,主庫不需要等待所有從庫給主庫反饋。(注意只要收到一個從庫的反饋即可)
技術(shù)實現(xiàn)
介于異步復(fù)制和全同步復(fù)制之間,主庫再執(zhí)行完客戶端提交的食物后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay log中才返回給客戶端。
缺點
相對于異步復(fù)制,半同步復(fù)制提交了數(shù)據(jù)的安全性,同時它也造成了一定程序的延遲,這個延遲至少是一個TCP/IP往返時間,因此,半同步復(fù)制雖好在低延時的網(wǎng)絡(luò)中使用。
XMind - Trial Version