mysql主从~半同步复制

在这里插入图片描述

原理:

Master每次commit有一个事务,要确保slave接受完主服务器发送的binlog日志文件,并写入到自己的realylog中,然后会给master发送信 号,告诉对方已经接收完毕,这样master才能进行下一个事务。保证了master和salve的绝对一致性

半同步复制配置步骤

1)安装插件:插件存放目录$basedir/lib/plugin/
1)给master安装插件:
mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so’;
Query OK, 0 rows affected (0.13 sec)
2)查看是否安装成功
mysql> show global variables like ‘rpl_semi_sync%’;
在这里插入图片描述
rpl_semi_sync_master_enabled 是否启用master的半同步复制
rpl_semi_sync_master_timeout:默认主等待从返回信息的超时间时间,10秒。动态可调
rpl_semi_sync_master_trace_level:用于开启半同步复制模式时的调试级别,默认是32
rpl_semi_sync_master_wait_no_slave:是否允许每个事物的提交都要等待slave的信号.on为每一个事物都等待,off则表示slave追赶上后,也不会开启半同步模式,需要手动开启
3)slave上安装插件
mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
Query OK, 0 rows affected (0.00 sec
mysql> show global variables like ‘rpl_semi_sync%’;
在这里插入图片描述
rpl_semi_sync_slave_enabled:slave是否启用半同步复制

激活半同步

1)在master上执行
mysql> set global rpl_semi_sync_master_enabled =on;
mysql> show global status like ‘rpl_semi_sync%’;
在这里插入图片描述
Rpl_semi_sync_master_clients: 没有一个从服务器启用半同步复制
Rpl_semi_sync_master_net_avg_wait_time: master等待slave回复的平均等待时间。单位毫秒
Rpl_semi_sync_master_net_wait_time: master总的等待时间。单位毫秒
Rpl_semi_sync_master_net_waits: master等待slave回复的总的等待次数
Rpl_semi_sync_master_no_times: master关闭半同步复制的次
Rpl_semi_sync_master_no_tx: 表示从服务器确认的不成功提交的数量. Rpl_semi_sync_master_status: 标记 master现在是否是半同步复制状态
Rpl_semi_sync_master_timefunc_failures: master调用时间(如gettimeofday())失败的次数
Rpl_semi_sync_master_tx_avg_wait_time: master花在每个事务上的平均等待时间
Rpl_semi_sync_master_tx_wait_time: master花在事物上总的等待时间
Rpl_semi_sync_master_tx_waits: master事物等待次数
Rpl_semi_sync_master_wait_pos_backtraverse:后来的先到了,而先来的还没有到的次数
Rpl_semi_sync_master_wait_sessions: 当前有多少个session因为slave回复而造成等待
Rpl_semi_sync_master_yes_tx: 表示从服务器确认的成功提交数量

2)slave执行
mysql> set global rpl_semi_sync_slave_enabled=on;
mysql> show global status like ‘rpl_semi_sync%’;
在这里插入图片描述
3)重启io线程
mysql> stop slave IO_THREAD;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave IO_THREAD;
Query OK, 0 rows affected (0.01 sec)

mysql> show global status like ‘rpl_semi_sync%’;
在这里插入图片描述
在这里插入图片描述
*

测试验证

原理:
当slave从库的IO_Thread 线程将binlog日志接受完毕后,要给master一个确认,如果超过10s未收到slave的接收确认信号,那么就会自动转换为传统的异步复制模式。
1) master插入一条记录,查看slave是否有成功返回
mysql> insert into a values (3);
Query OK, 1 row affected (0.00 sec)

mysql> show global status like ‘rpl_semi_sync%_yes_tx’;

在这里插入图片描述
Rpl_semi_sync_master_yes_tx:表示这次事物成功从slave返回一次确认信号

2)slave上模拟故障查看返回时间
当slave挂掉后,master这边更改操作
mysql> stop slave io_thread;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into a values (4);
Query OK, 1 row affected (10.00 sec)
这次插入一个值需要等待10秒(默认的等待时间)
mysql> insert into a values (5);
Query OK, 1 row affected (0.01 sec)
现在自动转成了原来的异步模式
2) 再次启动slave,查看同步模式
在这里插入图片描述
如需要再次半同步复制,则按照以上步骤重新开启就可以

mysql> set global rpl_semi_sync_slave_enabled=on;
mysql> stop slave IO_THREAD;
mysql> start slave IO_THREAD;

或者可以将该参数写入到配置文件中:
master:rpl_semi_sync_master_enabled=1
slave:rpl_semi_sync_slave_enabled=1
4、测试结果
5、master需要等到slave确认后才能提交,如果等不到确认消息,master等待10s种后自动变成异步同步;slave启起来后,master上改变的数据还是会自动复制过来,数据又回到一致。
6、等待时间可以在master上动态调整,如下
mysql> set global rpl_semi_sync_master_timeout=3600000;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like ‘rpl_semi_sync%’;
在这里插入图片描述

卸载插件

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

扩展补充:

跟复制相关的文件

master.info:用于保存slave连接至master的相关信息,包括服务器地址,用户名,密码等
relay-log.info:保存在当前的slave节点上已经复制的当前二进制日志和本地relay log日志的对应关系

复制的监控和维护

purge 命令
mysql> purge binary logs to ‘mysql-bin.000008’;
指明这个二进制文件之前的所有的文件都会被清理

mysql> purge binary logs before '2017-04-23 20:46:26'; 
指明二进制日志文件中这个时间点之前的所有的事件都会被清理

监控操作
mysql> show master status; 显示主节点正在写哪个二进制日志文件
mysql> show binlog events; 显示在二进制文件中记录了哪些信息
mysql> show binary logs ; 显示记录了哪些二进制日志文件
mysql> show slave status; 显示从服务器的状态
mysql> show processlist; 显示当前启用的线程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

韶博雅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值