mysql 半同步延时

半同步搭建
所谓的半同步复制就是master每commit一个事务,要slave应用这个事物后回给master信号。这样master才能把事物成功commit。这样就保证了master-slave的数据绝对的一致(但是以牺牲master的性能为代价).但等待时间也是可以调整的。 mysql半同步复制等待时间超时后(默认时间为10秒),会自动转换成异步复制 ,相对于异步复制,半同步复制提高了数据的安全性。

安装mysql5.5之后的版本,因为这个版本之后才实现的半同步复制

第一大步: 先要搭建好mysql主从异步复制,参考上一篇 。

第二大步:在异步基础上转成半同步复制

Master插入半同步插件:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.17 sec)
Slave插入半同步插件:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.16 sec)rpl_semi_sync_master_timeout

半同步的等待时间为10s,10s后如果还没有发送同步成功的信息,会自动转变为异步

rpl_semi_sync_master_enabled OFF
这里写图片描述
rpl_semi_sync_master_wait_for_slave_count

当多个从机时,只接收1个ack

mysql半同步实现
先在slave端关闭I/O线程
mysql> stop slave io_thread;
Query OK, 0 rows affected (0.19 sec)
这里写图片描述

>Master和slave端数据库设置半同步参数开启
Master:
mysql> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%semi_sync%';
+-------------------------------------------+------------+| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON || rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)
Slave:
mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)
>在slave端打开I/O线程,查看半同步成功字数,再在master中插入数据,查看半同步的成功记录
Slave:
mysql> start slave io_thread;
Query OK, 0 rows affected (0.00 sec)
Master:
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> insert into userdb values ('user3','123');
Query OK, 1 row affected (0.15 sec)
mysql> show global status like 'rpl_semi_sync%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |  --有一个从服务器启用半同步复制
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |  --master等待slave回复的平均等待时间。单位毫秒
| Rpl_semi_sync_master_net_wait_time         | 0     |  --master总的等待时间。单位毫秒
| Rpl_semi_sync_master_net_waits             | 0     |  --master等待slave回复的总的等待次数
| Rpl_semi_sync_master_no_times              | 0     |  --master关闭半同步复制的次数
| Rpl_semi_sync_master_no_tx                 | 0     |  --master 等待超时的次数
| Rpl_semi_sync_master_status                | ON    |  --标记master现在是否是半同步复制状态
| Rpl_semi_sync_master_timefunc_failures     | 0     |  --master调用时间(如gettimeofday())失败的次数  
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |  --master花在每个事务上的平均等待时间
| Rpl_semi_sync_master_tx_wait_time          | 0     |  --master花在事物上总的等待时间
| Rpl_semi_sync_master_tx_waits              | 0     |  --master事物等待次数
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |  --后来的先到了,而先来的还没有到的次数
| Rpl_semi_sync_master_wait_sessions         | 0     |  --当前有多少个session因为slave回复而造成等待
| Rpl_semi_sync_master_yes_tx                | 0     |  --标记slave是否在半同步状态
+--------------------------------------------+-------+
在slave上查看状态就只有下面一条信息
mysql> show global status like 'rpl_semi_sync%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+

这里写图片描述
这里写图片描述
这里用时为10s左右
Rpl_semi_sync_master_yes_tx,Rpl_semi_sync_master_no_tx数值随着我们的操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值