MySQL5.5有很多的改進(jìn)和增強(qiáng),也引入了很多新功能。在可用性方面有如下幾點(diǎn)新特性:
Semi-synchronous Replication(半同步復(fù)制)
我們知道在5.5之前,MySQL的復(fù)制其實(shí)是異步操作,而不是同步,也就意味著允許主從之間的數(shù)據(jù)存在一定的延遲,mysql當(dāng)初這樣設(shè)計(jì)的目的可能也是基于可用性的考慮,為了保證master不受slave的影響,并且異步復(fù)制使得master處于一種性能最優(yōu)的狀態(tài):寫完binlog后即可提交而不需要等待slave的操作完成。這樣存在一個(gè)隱患,當(dāng)你使用slave作為備份時(shí),如果master掛掉,那么會(huì)存在部分已提交的事務(wù)未能成功傳輸?shù)絪lave的可能,這就意味著數(shù)據(jù)丟失!
在MySQL5.5版本中,引入了半同步復(fù)制模式(Semi-synchronous Replication)能夠成功避免上述數(shù)據(jù)丟失的隱患。在這種模式下:master會(huì)等到binlog成功傳送并寫入至少一個(gè)slave的delay log之后才會(huì)提交,否則一直等待,直到timeout(默認(rèn)10s)。當(dāng)出現(xiàn)timeout的時(shí)候,master會(huì)自動(dòng)切換半同步為異步,直到至少有一個(gè)slave成功收到并發(fā)送Acknowledge,master會(huì)再切換回半同步模式。結(jié)合這個(gè)新功能,我們可以做到,在允許損失一定的事務(wù)吞吐量的前提下來保證同步數(shù)據(jù)的絕對(duì)安全,因?yàn)楫?dāng)你設(shè)置timeout為一個(gè)足夠大的值的情況下,任何提交的數(shù)據(jù)都會(huì)安全抵達(dá)slave。
半同步模式其實(shí)是作為MySQL5.5的一個(gè)plugin實(shí)現(xiàn)的,master和slave使用不同的plugin。默認(rèn)情況下沒有安裝該plugin,官方提供的MySQL Server RPM包默認(rèn)安裝后,會(huì)在/usr/lib(64)/mysql/plugin/下面找到該插件。安裝完插件之后,還需要手動(dòng)設(shè)置系統(tǒng)參數(shù)以開啟半同步復(fù)制模式。詳細(xì)的過程可參考下面步驟。
——————————————————————————
設(shè)置步驟:
【Master】
安裝插件
mysql>install plugin rpl_semi_sync_master soname ‘semisync_master.so’;
(文檔中給的插件名用單引號(hào)引起來了,我執(zhí)行卻提示語法錯(cuò)誤,把引號(hào)去掉后方能執(zhí)行成功)
然后會(huì)出現(xiàn)以下4個(gè)系統(tǒng)參數(shù):
動(dòng)態(tài)修改rpl_semi_sync_master_enabled=ON,同時(shí)根據(jù)情況需要修改timeout=1000 (單位毫秒)
在show global status中也會(huì)出現(xiàn)如下的幾個(gè)狀態(tài):
————————————————————————-
【Slave】
安裝插件
mysql>install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
然后會(huì)出現(xiàn)下列2個(gè)參數(shù):
動(dòng)態(tài)設(shè)置rpl_semi_sync_slave_enabled =ON,然后重啟replication(stop slave;start slave;)即可。記得一定要重啟,否則master無法確認(rèn)該slave是否開啟了半同步。相同的操作可以在任意多個(gè)slave中進(jìn)行設(shè)置。
show global status會(huì)出現(xiàn)下面的系統(tǒng)狀態(tài):
歡迎光臨 Chinaunix (http://www.72891.cn/) | Powered by Discuz! X3.2 |