1.安裝半同步插件
mysql5.7 gz解壓后在plugin目錄下已經(jīng)存在 半同步的so文件了
/mysql/lib/plugin目錄下
主庫安裝為 semisync_master.so
從庫安裝為 semisync_slave.so

進(jìn)入mysql 客戶端,
在主庫上執(zhí)行sql
install plugin rpl_semi_sync_master soname 'semisync_master.so';
set global rpl_semi_sync_master_enabled=ON;
從庫上執(zhí)行:
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled=ON;
注意:初次加載插件后,MySQL會(huì)將該插件記錄到系統(tǒng)表mysql.plugin中,下次啟動(dòng)時(shí)系統(tǒng)會(huì)自動(dòng)加載該插件。
檢查:select * from mysql.plugin;

檢查:
select @@have_dynamic_loading

2.配置my.cnf
主從庫都進(jìn)行配置:
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
主庫配置:
rpl_semi_sync_master_enabled=ON:表示在master上已經(jīng)開啟半同步復(fù)制模式。
rpl_semi_sync_master_timeout=10000:該參數(shù)默認(rèn)為10000毫秒,即10秒,可以調(diào)整,表示如果主庫在某次事務(wù)中等待事件超過10秒,則降級(jí)為異步復(fù)制模式,不再等待slave,如果master探測(cè)到slave恢復(fù),則會(huì)自動(dòng)回到半同步模式。
rel_semi_synv_master_wait_no_slave:表示是否允許master每個(gè)事務(wù)提交后都要等待slave的確認(rèn)信號(hào),默認(rèn)是ON,即每一個(gè)事務(wù)都會(huì)等待,如果是OFF,則slave追趕上之后,也不會(huì)回到半同步模式。
rlp_semi_sync_master_trace_level=32:表示開啟半同步復(fù)制模式時(shí)的調(diào)試級(jí)別,默認(rèn)是32。
從庫配置:
pl_semi_sync_slave_enabled=ON:表示在slave上開啟半同步復(fù)制模式。
rlp_semi_sync_slave_trace_level=32:表示開啟半同步復(fù)制模式時(shí)的調(diào)試級(jí)別,默認(rèn)是32。
3.在主從庫上開啟半同步復(fù)制
主:
mysql>set global rpl_semi_sync_master_enabled=1;
mysql>set global rpl_semi_sync_master_timeout=30000;
從:
mysql>set global rpl_semi_sync_slave_enabled=1;
注意:如果之前配置的是異步復(fù)制,在這里要重啟一下從庫的IO線程,如果是全新的半同步則不用重啟.
重啟命令是:mysql>stop slave io_thread;start slave io_thread;
4.在主庫上查看半同步狀態(tài)
mysql>show status like '%semi_sync';
在輸出信息中,我們重點(diǎn)關(guān)注三個(gè)參數(shù):
rpl_semi_sync_master_status? OFF/ON? ? #ON表示半同步復(fù)制打開,OFF表示關(guān)閉
rpl_semi_sync_master_yes_tx? [number]? ? ? #這個(gè)數(shù)字表示主庫當(dāng)前有幾個(gè)事務(wù)說通過半同步復(fù)制到從庫的
rpl_semi_sync_master_no_tx? [number]? ? ? #表示有幾個(gè)事務(wù)不是通過半同步復(fù)制到從庫的