MySQL5.5有很多的改進(jìn)和增強(qiáng),也引入了很多新功能。在可用性方面有如下幾點(diǎn)新特性: - Semi-synchronous Replication
- Replication Heartbeat
- Automatic Relay Log Recovery
- Replication Per Server Filtering
- Replication Slave Side Data Type Conversions
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ù)的絕對安全,因?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’; (文檔中給的插件名用單引號引起來了,我執(zhí)行卻提示語法錯(cuò)誤,把引號去掉后方能執(zhí)行成功) 然后會(huì)出現(xiàn)以下4個(gè)系統(tǒng)參數(shù): - rpl_semi_sync_master_enabled OFF
- rpl_semi_sync_master_timeout 10000
- rpl_semi_sync_master_trace_level 32
- rpl_semi_sync_master_wait_no_slave ON
動(dòng)態(tài)修改rpl_semi_sync_master_enabled=ON,同時(shí)根據(jù)情況需要修改timeout=1000 (單位毫秒) 在show global status中也會(huì)出現(xiàn)如下的幾個(gè)狀態(tài): - Rpl_semi_sync_master_clients 0 ##表示有多少slave設(shè)置了半同步模式。
- Rpl_semi_sync_master_net_avg_wait_time 0
- Rpl_semi_sync_master_net_wait_time 0
- Rpl_semi_sync_master_net_waits 0
- Rpl_semi_sync_master_no_times 0
- Rpl_semi_sync_master_no_tx 0 ##表示沒有成功接收slave回執(zhí)的提交次數(shù)
- Rpl_semi_sync_master_status OFF ##表示當(dāng)前是異步模式還是半同步模式。
- Rpl_semi_sync_master_timefunc_failures 0
- Rpl_semi_sync_master_tx_avg_wait_time 0
- Rpl_semi_sync_master_tx_wait_time 0
- Rpl_semi_sync_master_tx_waits 0
- Rpl_semi_sync_master_wait_pos_backtraverse 0
- Rpl_semi_sync_master_wait_sessions 0
- Rpl_semi_sync_master_yes_tx 0 ##表示成功接收slave回執(zhí)的提交次數(shù)
————————————————————————- 【Slave】 安裝插件 mysql>install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’; 然后會(huì)出現(xiàn)下列2個(gè)參數(shù): - rpl_semi_sync_slave_enabled OFF
- rpl_semi_sync_slave_trace_level 32
動(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): - Rpl_semi_sync_slave_status ON ##表示當(dāng)前處于異步模式還是半同步模式
|