mysql半同步复制

1概述:

         master每次commit一个事务,要确保slave接受完主服务器发送的binlog日志文件并写入relaylog中,然后给master信号,master才可以成功commit事务,这样保证了主从数据绝对一致(牺牲master性能),但可调整等待时间。

2.实现过程

准备一套M-S架构(基于GTIDs)

1.给master和slave安装插件plugin插件($basedir/lib/plugin/)

master:

mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql>show global variables like 'rpl_semi_sync%';

slave:

mysql>install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql>show global variables like 'rpl_semi_sync%';

2.激活master与slave插件

master:
mysql> set global  rpl_semi_sync_master_enabled=on;
mysql> show global status like 'rpl_semi_sync%';

slave:
mysql> set global  rpl_semi_sync_slave_enabled=on;
mysql>show global variables like 'rpl_semi_sync%';

3.重启slave的IO线程
mysql> stop slave IO_THREAD;
mysql> start slave IO_THREAD;

4.测试
master
insert into db2.u1 values (null,'c');
查看从服务器响应的状态码
show global status like 'rpl_semi_sync%_yes_tx';

3.模拟slave故障

1.模拟slave故障
slave:
service mysqld stop
master:
mysql>insert into db2.u1 values (null,'f');    观察等待十秒才结束

后续再添加数据会立刻生效,原因是自动转换为异步模式


3.重新启动半同步复制
slave:
service mysqld start
mysql>set global  rpl_semi_sync_slave_enabled=on; 
mysql> stop slave IO_THREAD;
mysql> start slave IO_THREAD;

4.修改等待时间(默认10s)

mysql>set global  rpl_semi_sync_master_timeout=30000;
mysql>show global variables like 'rpl_semi_sync%';

5.插件卸载

mysql>select plugin_name,load_option from information_schema.plugins;
mysql>uninstall plugin plugin_name;

总结:master等待slave确认后才能提交,如果等不到,master等待10秒后自动变成异步同步,slave启动起来后,master上的数据又会自动复制过来,数据又回到一致。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值