MySQL8配置主主同步(半同步模式)

简介

目前,MySQL支持的复制方式有三种:
异步复制(Asynchronous Replication):默认模式。原理最简单,性能最好。有可能会出现主备之间数据不一致的情况。
半同步复制(Semi-synchronous Replication):相比异步复制,半同步复制牺牲了一定的性能,提升了主备之间数据的一致性。
组复制(Group Replication):基于Paxos算法实现分布式数据复制的强一致性。只要大多数机器存活就能保证系统可用。相比半同步复制,Group Replication的数据一致性和系统可用性更高。

MySQL半同步复制的实现是建立在MySQL异步复制的基础上的。MySQL支持两种略有不同的半同步复制:AFTER_SYNC和AFTER_COMMIT(受rpl_semi_sync_master_wait_wait_point控制)。
开启半同步复制时,Master在返回之前会等待Slave的响应或超时。当Slave超时时,半同步复制退化成异步复制。

半同步复制原理

默认情况下,mysql的复制是异步的,主库执行完操作后即可成功返回给客户端,无需等待binlog传给从库。
在当主库写入一个事务并提交成功,从库尚未获得主库的binlog时,主库宕机,从库可能会损失该事务,造成主从库的不一致。
半同步复制保证了主库的每一个binlog都能可靠的复制到从库上,主库在每次事务提交时,并不及时反馈给前端客户,而是
等待其中一个从库也接收到binlog并成功写入中继日志后,主库才返回给客户端,此时,至少有两份日志记录,一份在主库binlog上
另一份至少在一个从库的中继日志中,保证了数据的完整性。

半同步复制配置

上一篇《MySQL8配置主主同步(开启GTID)并进行故障模拟》已开启了主主同步,并开启了GTID,本篇将在此基础上继续配置半同步复制。

查看是否已安装插件

查看插件列表:

show plugins;

查看插件是否安装rpl_semi_sync_masterrpl_semi_sync_slave。如果是主从同步,主库只需要安装rpl_semi_sync_master,从库只需要安装rpl_semi_sync_slave。如果是主主同步,则这两个插件都需要安装。

安装插件

install plugin rpl_semi_sync_master soname 'semisync_master.so';
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

安装后执行show plugins查看是否已安装插件。

开启半同步复制

在my.cnf[mysqld]末尾添加:

#开启半同步复制
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1

重启mysql,查看:

show variables like '%semi%';

关键参数说明:
rpl_semi_sync_master_enabled         ##设置为on表示开启了半同步功能
rpl_semi_sync_master_timeout         ##单位是毫秒,表示如果主库等待从库回复消息的时间超过该值,就自动切换为异步复制模式
rpl_semi_sync_master_wait_no_slave   ##默认是ON。表示master每个事务提交后都要等待slave的接收确认信号
rpl_semi_sync_master_wait_for_slave_count ##它控制主库接收多少个从库写事物成功反馈,才返回成功给客户端
rpl_semi_sync_master_wait_point ##默认值是AFTER_SYNC,含义是主库将每个事物写入binlog,并传递给从库,刷新到中继日志,主库开始等待从库的反馈,接收到从库的回复之后,再提交事物并且返回”commit ok”结果给客户端

测试

此时关掉主主数据库中的任意一个,然后在未关闭的数据库中执行SQL语句,将会耗费10秒的时间,这10秒是在等待回应,超过10秒后,会自动切换为异步模式。

查看状态:

show status like 'Rpl_semi_sync_master_status';


半同步复制已经关闭,降级为了异步复制。

重新开启之前关闭的数据库,异步复制又重新变为半同步模式(Rpl_semi_sync_master_status的值变为ON)。

发表评论

邮箱地址不会被公开。 必填项已用*标注