MySQL主从复制之半同步复制

 

 

   异步复制方式不足之处在于,当主库把event写入二进制日志后,并不知道从库是否已经接受并应用日志了;如果主库发生意外宕机或者是奔溃,很有可能主库提交的事物没有传到任何一台从库机器上。在高可用集群架构下做主备切换,就会造成新的主库丢失数据。

   mysql5.5版本之后引入了半同步复制功能,主从服务器必须安装半同步复制插件,才能开启该复制功能。该功能确保从库接收完主库传递过来的binlog内容已经写入到自己的relay log里面了,才会通知主库上面的等待线程,该操作完毕。

    如果等待超时,超过rpl_semi_sync_master_timeout 参数设置时间,则关闭半同步复制,并自动转换为异步复制模式,直到至少有一台从库通知主库已经接收到binlog信息位置。

  半同步复制提升了主从之间数据的一致性,让复制更加安全可靠,在mysql5.7版本中又增加了rpl_semi_sync_master_wait_point 参数,用来控制半同步模式下主库在返回给session事物成功之前的事务提交方式。

该参数有两个值:

 

AFTER_SYNC(缺省值):主服务器将每个事务写入其二进制日志和从服务器,并将二进制日志同步到磁盘。同步后,主设备等待从设备确认事务接收。在收到确认后,主服务器将事务提交给存储引擎,并将结果返回给客户端,然后客户端可以继续。

AFTER_COMMIT:主服务器将每个事务写入其二进制日志和从服务器,同步二进制日志,并将事务提交给存储引擎。主提交后等待从服务器确认事务接收。在收到确认后,主人将结果返回给客户端,然后客户端可以继续。

 

 

 

2.1半同步方式安装

主库上先安装复制插件和开启半同步复制功能:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

set global rpl_semi_sync_master_enabled=on;

  MySQL主从复制之​半同步复制_MySQL

 

show variables like '%rpl_semi_sync_master%';

  MySQL主从复制之​半同步复制_MySQL_02

 

主库参数文件添加:

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

 

show plugins;

  MySQL主从复制之​半同步复制_MySQL_03

 

SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS  WHERE PLUGIN_NAME LIKE '%semi%';

  MySQL主从复制之​半同步复制_MySQL_04

 

同理从库也安装插件和开启半同步复制功能:

从库安装复制插件和开启半同步复制功能:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

set global rpl_semi_sync_slave_enabled=on;

  MySQL主从复制之​半同步复制_MySQL_05

 

备库参数文件添加:

rpl_semi_sync_slave_enabled=1

 

由于之前是异步复制,需要重启从库IO线程,激活半同步复制。

 

STOP SLAVE IO_THREAD;

START SLAVE IO_THREAD;

  MySQL主从复制之​半同步复制_MySQL_06

此时查看主库:

已经有一个从库连接到主库了。而且是半同步方式。

show variables like '%rpl_semi_sync_master%';

  MySQL主从复制之​半同步复制_MySQL_07

 

2.2半同步方式切换成异步方式

1、主库超时超过指定参数时间

rpl_semi_sync_master_timeout 时间为10s。生产上建议设置的尽可能大。

set global rpl_semi_sync_master_timeout=xxx;

  MySQL主从复制之​半同步复制_MySQL_08

 

2、手动切换

主库

set rpl_semi_sync_master_enabled=off;

从库:

set rpl_semi_sync_slave_enabled=off

关闭从库I/O thread

stop salve io_thread;

start salve io_thread;

 

 

 

 



About Me

........................................................................................................................

 

MySQL主从复制之​半同步复制_MySQL_09

........................................................................................................................