mysql的主從複制主要有3種模式:
a..主從同步複制:資料完整性好,但是性能消耗高
b.主從異步複制:性能消耗低,但是容易出現主從資料唯一性問題
c.主從半自動複制:介于上面兩種之間。既能很好的保持完整性,又能提高性能
是以前面文章配置完主從之後,想改成半自動複制,下面是步驟:
1.主從的各個節點都要安裝半自動複制插件,方法是登陸mysql執行一下腳本:
主庫:
install plugin rpl_semi_sync_master soname 'semisync_master.so';
從庫:
INSTALL PLUGIN rpl_semi_sync_slave SONAME
'semisync_slave.so'
;
執行完可以檢視安裝狀态,沒有啟動,是以‘rpl_semi_sysnc_master_enabled’是‘OFF’
show global variables like 'rpl%';
2.在主從資料庫的my.cnf裡面加入下面:
在Master和Slave的my.cnf中編輯:
# On Master
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 #此機關是毫秒
#可以不寫,這裡隻為示範,預設就是AFTER_SYNC
#rpl_semi_sync_master_wait_point=AFTER_SYNC
# On Slave
[mysqld]
rpl_semi_sync_slave_enabled=1
新版本的semi sync 增加了rpl_semi_sync_master_wait_point參數 來控制半同步模式下 主庫在傳回給會話事務成功之前送出事務的方式。
該參數有兩個值:
- AFTER_COMMIT(5.6預設值)
master将每個事務寫入binlog ,傳遞到slave 重新整理到磁盤(relay log),同時主庫送出事務。master等待slave 回報收到relay log,隻有收到ACK後master才将commit OK結果回報給用戶端。
- AFTER_SYNC(5.7預設值,但5.6中無此模式)
master 将每個事務寫入binlog , 傳遞到slave 重新整理到磁盤(relay log)。master等待slave 回報接收到relay log的ack之後,再送出事務并且傳回commit OK結果給用戶端。 即使主庫crash,所有在主庫上已經送出的事務都能保證已經同步到slave的relay log中。
是以5.7引入了after_sync模式,帶來的主要收益是解決after_commit導緻的master crash主從間資料不一緻問題,是以在引入after_sync模式後,所有送出的資料已經都被複制,故障切換時資料一緻性将得到提升。
3.檢視狀态
showstatus like "%rpl_semi%";
注意看RPL_SEMI_SYNC_MASTER_CLIENTS 後面的value代表連結了介個從庫