基于gtid的半同步复制

半同步复制配置

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用

主server12:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> set global rpl_semi_sync_master_enabled=1;
mysql> show variables like '%semi_sync%';

基于gtid的半同步复制

从server13:

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> stop slave io_thread;
mysql> start slave io_thread;
mysql> show global variables like '%semi%';

基于gtid的半同步复制

插入检测: 
在master中:

mysql>  use test;

mysql>  insert into userlist values ('user3','123');

mysql>  show status like '%semi_sync%';

 

基于gtid的半同步复制

 

基于gtid的半同步复制

将slave的半同步关掉,进行插入测试: 
在slave中

mysql> set global rpl_semi_sync_slave_enabled=OFF; ###将半同步设置为关闭 mysql> stop slave io_thread;

mysql> start slave io_thread;

mysql> show global variables like '%semi%';

基于gtid的半同步复制

在master中: 
当把从机的I/O线程关闭后,主数据库在进行对复制数据库的库进行更改时,在进行操作会等待10秒,增加了一次半同步传输的失败次数。

mysql> insert into userlist values ('user4','666');

mysql> show global status like '%semi%';

基于gtid的半同步复制