MySql主从复制:半同步复制

默认创建的MySql复制是异步的,主库将数据库修改事件写入到bin log日志,并不知道从库是否获取了这些事件并应用在从库上。所以当主库崩溃导致需要主从切换时,从库上的数据有可能不是最新的。

可以通过扩展的方式支持半同步复制:当主库执行一个更新操作事务时,提交操作会被阻止直到至少有一个半同步复制的slave确认已经收到本次更新操作,主库的提交操作才会继续。

半同步复制的slave发生确认消息只会在本次更新操作记录已经记录到本地的relay log之后,如果没有任何slave发送确认消息而导致超时,半同步复制会自动转换成异步复制,如slave恢复正常则自动切回半同步复制。半同步复制可能对性能产生影响,因为主库的提交操作只有在收到至少一个从库的确认消息之后或者达到设定的超时时间才能执行。但是能保证数据的可靠性。

在异步复制的基础上执行以下操作可将异步复制变成半同步复制:MySql异步复制

一、安装半同步复制的插件

1、在主库上安装插件:INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

2、在从库上安装插件:INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

3、查看插件的状态:SELECT PLUGIN_NAME ,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';

二、开启半同步复制

1、在主库上开启半同步复制:       

#用来控制半同步复制的行为;AFTER_SYNC(默认值)、AFTER_COMMIT;【可忽略】
SET GLOBAL  rpl_semi_sync_master_wait_point = AFTER_SYNC; 
#超时时间,此时间内未同步成功,将变成异步复制,稍后自动切回半同步,单位:毫秒,默认10000;
SET GLOBAL rpl_semi_sync_master_timeout=N;  
#启用master节点半同步
SET GLOBAL rpl_semi_sync_master_enabled=1;

2、在备库上开启半同步复制,可以只配置一个从库是半同步复制,其它的仍然用异步复制:

SET GLOBAL rpl_semi_sync_slave_enabled=1;

3、重启备库上的IO线程:

STOP slave IO_Thread;

START slave IO_Thread;

4、查看监控状态:show status like '%rpl_semi_sync_%';

rpl_semi_sync_master_clients:半同步slave的个数;

rpl_semi_sync_master_status:1表示主库半同步开启并正常;0表示关闭或者变成了异步复制;

rpl_semi_sync_master_no_tx:表示有多少没有提交到slave的确认消息;

rpl_semi_sync_master_yes_tx:表示有多少个提交到slave的确认消息;

rpl_semi_sync_slave_status:1表示备库开启并正常;0表示备库关闭或开启但异常;

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值