记录配置mysql主从半同步复制的过程
加载lib,所有主从节点都要配置
主库:
install plugin rpl_semi_sync_master soname 'semisync_master.so';
从库:
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
建议一起装,因为会有主从切换的情景。
master和slave 都要安装这两个插件
查看,确保所有节点都成功加载。
show plugins;
执行了命令 show plugins 会看到这两个插件
查询主库状态信息
show global status like "%sync%";
此时半同步状态并没有开启 是off状态
启动半同步
先启用从库上的参数,最后启用主库的参数
从库:set global rpl_semi_sync_slave_enabled = {0|1}; # 1:启用,0:禁止
set global rpl_semi_sync_slave_enabled = 1
主库: set global rpl_semi_sync_master_enabled = {0|1}; # 1:启用,0:禁止
set global rpl_semi_sync_master_enabled = 1
半同步的时候有10s的等待时间,超过10S就会变成异步提交
这个时间是可以配置的,默认就是10s 可以不用配置
单位为ms
set global rpl_semi_sync_master_timeout = 10000;
重启从数据库上的IO线程
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
再次查询主库状态信息
show global status like "%sync%";
master:
此时半同步状态开启了 是on状态
Rpl_semi_sync_master_clients 支持和注册半同步复制的已连Slave数
Rpl_semi_sync_master_no_times master关闭半同步复制的次数
Rpl_semi_sync_master_no_tx master没有收到slave的回复而提交的次数,可以理解为master等待超时的次数,即半同步模式不成功提交数量
Rpl_semi_sync_master_status ON是活动状态(半同步),OFF是非活动状态(异步),用于表示主服务器使用的是异步复制模式,还是半同步复制模式
Rpl_semi_sync_master_tx_avg_wait_time master花在每个事务上的平均等待时间
Rpl_semi_sync_master_tx_waits master等待成功的次数,即master没有等待超时的次数,也就是成功提交的次数
Rpl_semi_sync_master_yes_tx master成功接收到slave的回复的次数,即半同步模式成功提交数量。
slave:
此时半同步状态开启了 是on状态
show global variables like '%sync%';
rpl_semi_sync_master_enabled (主库)是否启动半同步
rpl_semi_sync_master_timeout 等待多时毫秒后变成异步复制,默认是10000ms
rpl_semi_sync_master_wait_point 5.7默认AFTER_SYNC(增强版半同步复制,无损复制模式),在得到slave的应答后再commit,可选值AFTER_COMMIT,在master提交后同步数据给slave,然后master等待slave应答,应答成功返回客户端。
这样半同步复制就开始成功了