MySQL基于主从(AB)架构的半同步复制实现


一、什么是半同步复制

所谓的半同步复制就是master每commit一个事务(简单来说就是做一个改变数据的操作),要确保slave接受完主服务器发送的binlog日志文件并写入到自己的中继日志relay log里,然后会给master信号,告诉对方已经接收完毕,这样master才能把事物成功commit。这样就保证了master-slave的数据绝对的一致(但是以牺牲master的性能为代价).但等待时间也是可以调整的。

(简单点就是每次master进行了增删改等操作时会先等待slave是否接受到了此次指令,如果slave接收到了就会进行一个回复,然后master才会正常进行增删改操作;否则master等待一段时间后没收到slave的回复就会暂时抛弃主从关系,正常进行自己的增删改操作,直至自己的从数据库回归为止)

二、半同步复制的基本实现

第一步:准备一套M-S(AB)的主从架构

第二步:给MASTER与SLAVE安装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%';

第三步:激活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%';

第四步:在SLAVE服务器中重启IO线程

mysql> stop slave IO_THREAD;
mysql> start slave IO_THREAD;

第五步:测试验证半同步复制

当slave从库的IO_Thread 线程将binlog日志接受完毕后,要给master一个确认,如果超过10s未收到slave的接收确认信号,那么就会自动转换为传统的异步复制模式。

1)master插入一条记录,查看slave是否有成功返回

mysql> insert into ceshi2.tb_student values (null,'j');
mysql> show global status like 'rpl_semi_sync%_yes_tx'; 
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_yes_tx |  1    |
表示这次事物成功从slave返回一次确认信号
+-----------------------------+-------+

#value这边每次slave收到请求时这里的数值都会+1,否则数值不变。

三、等待时间的修改(默认10s)

mysql> set global rpl_semi_sync_master_timeout=3600000;
mysql> show global variables like 'rpl_semi_sync%';
+------------------------------------+---------+
| Variable_name                      | Value   |
+------------------------------------+---------+
| rpl_semi_sync_master_enabled       | ON      |
| rpl_semi_sync_master_timeout       | 3600000 |
| rpl_semi_sync_master_trace_level   | 32      |
| rpl_semi_sync_master_wait_no_slave | ON      |
+------------------------------------+---------+

四、卸载半同步复制插件(不需要时)-将同步设为off时才能正常卸载

mysql> select plugin_name,load_option from information_schema.plugins;
mysql> uninstall plugin 插件名称;

#(找到对应的插件卸载即可)

补充:mysqld重启后,需要手工启动主从同步

# service mysqld stop
# service mysqld start
# mysql -P 3310 -p
mysql> show slave status\G
Slave_IO_Running: No
Slave_SQL_Running: No

以上情况代表,mysqld重启后,主从同步也会随之关闭,需要手工开启。

mysql> start slave;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值