天天看點

mysql5.7半自動同步設定

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結果回報給用戶端。

mysql5.7半自動同步設定
  • AFTER_SYNC(5.7預設值,但5.6中無此模式)

master 将每個事務寫入binlog , 傳遞到slave 重新整理到磁盤(relay log)。master等待slave 回報接收到relay log的ack之後,再送出事務并且傳回commit OK結果給用戶端。 即使主庫crash,所有在主庫上已經送出的事務都能保證已經同步到slave的relay log中。

mysql5.7半自動同步設定

是以5.7引入了after_sync模式,帶來的主要收益是解決after_commit導緻的master crash主從間資料不一緻問題,是以在引入after_sync模式後,所有送出的資料已經都被複制,故障切換時資料一緻性将得到提升。

3.檢視狀态

showstatus like "%rpl_semi%";

注意看RPL_SEMI_SYNC_MASTER_CLIENTS 後面的value代表連結了介個從庫