怎么实现MySQL中的半同步复制

技术怎么实现MySQL中的半同步复制这篇文章给大家介绍怎么实现MySQL中的半同步复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。关于MySQL的复制架构,大体有下面三种方式,异步,全同步复制,半

本文介绍了如何在MySQL中实现半同步复制。内容非常详细,感兴趣的朋友可以参考一下。希望对大家有帮助。

MySQL复制架构有三种方式:异步、全同步和半同步复制。

三种复制模式

第一种是异步复制,这是一种经典的主从复制。主从默认架构是异步的,性能相对更好。但是仍然会有数据丢失。

第二种是完全复制,比如MySQL Cluster,属于完全复制。实际上,MySQL

其实Cluster的发展并不是很顺利,更多的时候是实验室产品,但是时间固定在2016年12月12日,MySQL 5.7.17。

遗传算法群的主要特征

Replication插件引入增强了MySQL最初的高可用性方案(最初的复制方案),并提供了重要的功能-写入更多内容,确保组内的高可用性,并确保数据的最终一致性。有点像甲骨文的RAC。

第三种是介于异步复制和完全复制之间的方案,即半同步半同步复制。自从MySQL 5.5推出以来,就是对异步和全复制的补充,具体来说,应该是对MySQL Cluster的补充。

如果我们将此与甲骨文联系起来,它实际上有点类似于甲骨文的高可用性模式。在Oracle中,有最大性能模式、最大保护模式和最大高可用模式,其中最大性能模式是异步的,类似于异步复制的作用,最大保护模式是完全数据同步,有点类似于全复制方案,而最大高可用模式介于两者之间,甚至可以实现动态切换,类似于半同步复制的作用。

半同步复制

要开启半同步,我们需要安装插件,这个过程非常简单。的基本要求是在异步复制的情况下,版本在5.5以上,变量have_dynamic_loading为YES。

显示像“%have_dynamic_loading%”这样的变量;

- -

|变量名|值|

- -

|有_动态_加载|是|

- -

集合中的1行(0.00秒)在基本目录中,您可以轻松找到所需的插件。is /usr的当前基础目录,可以根据关键字找到插件。

#找到。-名称“semisync_master.so”。/lib 64/MySQL/plugin/semi sync _ master . so。/lib 64/MySQL/plugin/debug/semi sync _ master . so

安装插件只是两个简单的命令。

安装插件rpl _ semi _ sync _ master soname ' semi sync _ master . so ';

查询正常,0行受影响(0.11秒)

安装插件rpl _ semi _ sync _ slave soname ' semi sync _ slave . so ';

查询正常,0行受影响(0.00秒)安装后检查mysql.plugin,查看插件记录是否存在,或使用show plugins。

从mysql.plugin中选择*;

- -

|名称| dl |

- -

| rpl _ semi _ sync _ master | semi sync _ master . so |

| rpl _ semi _ sync _ slave | semi sync _ slave . so |

- -

2行一组(0.00秒)当然,默认的半同步开关还没有打开。

/p>

> show variables like 'rpl_semi_sync_master%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   |
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
4 rows in set (0.00 sec)这里涉及到两个参数rpl_semi_sync_master_enabled和rpl_semi_sync_slave_enabled,比较直观。

打开即可。set global rpl_semi_sync_master_enabled=1;
set global rpl_semi_sync_slave_enabled=1;如果在master端简单验证,也可以使用show status

> show status like 'rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON    |
+-----------------------------+-------+当然在slave端也需要做同样的操作,然后在slave端重启IO_Thread即可。

> STOP SLAVE IO_THREAD;
Query OK, 0 rows affected (0.01 sec)
> START SLAVE IO_THREAD;
Query OK, 0 rows affected (0.01 sec)Master端检查Rpl_semi_sync_master_statusSlave端检查

Rpl_semi_sync_slave_status

半同步在MySQL 5.6,5.7的变化

MySQL  5.7中新增了一个参数来控制半同步模式下 主库在返回给会话事务成功之前提交事务的方式。

> show variables like 'rpl_semi_sync_master_wait_point';
+---------------------------------+------------+
| Variable_name                   | Value      |
+---------------------------------+------------+
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+---------------------------------+------------+
1 row in set (0.00 sec)而在MySQL 5.6中是什么设置呢,是AFTER_COMMIT

这两个参数该怎么理解。我参考了https://sanwen8.cn/p/105GRDe.html   中的图片。

master的数据写入了binlog,slave 刷新到磁盘(relay log),所以在OLTP的场景下,master需要等待slave 反馈收到relay log,只有收到ACK后master才将commit OK结果反馈给客户端

而MySQL 5.7中的半同步复制,有个叫法是Loss-Less半同步复制。实现的方式有了一些差别。

这种模式(AFTER_SYNC),事务是在提交之前发送给Slave,当Slave没有接收成功,并且如果发生Master宕机的场景,不会导致主从不一致,因为此时Master端还没有提交,所以主从都没有数据。

简单测试半同步复制

我们来简单看看半同步复制的一些小测试。

create database testsync;

然后创建一个表,插入一行数据。很明显执行速度很快。

> create table testsync.test(id int);
Query OK, 0 rows affected (0.07 sec)

> insert into testsync.test values(100);
Query OK, 1 row affected (0.01 sec)我们模拟网络延迟的情况,直接把slave停掉。

stop slave;这个时候在Master端插入数据就会有很慢。这个过程持续了大概10秒多。

> insert into testsync.test values(101);
Query OK, 1 row affected (10.00 sec)这里为什么是10秒,和一个扮同步复制的参数有关。单位是毫秒,所以换算下来就是10秒。

> show variables like 'rpl_semi_sync_master_timeout';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_timeout | 10000 |
+------------------------------+-------+

我们看看扮同步复制的开关。

> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | OFF   |
+-----------------------------+-------+slave端也是OFF的状态。

我们恢复状态,把slave启动。然后在Master端继续插入一条记录,速度就很快了。

> insert into testsync.test values(102);
Query OK, 1 row affected (0.00 sec)此时的开关是打开的。

> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON    |
+-----------------------------+-------+查看数据库日志,其实也能看到很明确的信息。

2017-02-04T23:37:44.551667+08:00 2145633 [Warning] Timeout waiting for
reply of binlog (file: mysql-bin.000017, pos: 1056976828), semi-sync up
to file mysql-bin.000017, position 1056976573.
2017-02-04T23:37:44.551713+08:00 2145633 [Note] Semi-sync replication switched OFF.
2017-02-04T23:41:05.824146+08:00
2145900 [Note] Start binlog_dump to master_thread_id(2145900)
slave_server(13058), pos(mysql-bin.000017, 1056976573)
2017-02-04T23:41:05.824194+08:00
2145900 [Note] Start semi-sync binlog_dump to slave (server_id: 13058),
pos(mysql-bin.000017, 1056976573)
2017-02-04T23:41:05.835505+08:00 0 [Note] Semi-sync replication switched ON at (mysql-bin.000017, 1056977083)

关于怎么实现MySQL中的半同步复制就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/95845.html

(0)

相关推荐

  • win10系统Docker搭建中常见的问题有哪些

    技术win10系统Docker搭建中常见的问题有哪些这篇文章主要讲解了“win10系统Docker搭建中常见的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“wi

    攻略 2021年12月13日
  • 寒冬腊月意思,寒冬腊月、北国风光、造句

    技术寒冬腊月意思,寒冬腊月、北国风光、造句【意思】指农历十二月天气最冷的时候。泛指寒冷的冬季。【读音】hán dōng là yuè 【出处】汉·无名氏《别诗(骨肉缘枝叶)》:“征夫怀远路,游子恋故乡。寒冬十二月,晨起

    生活 2021年10月24日
  • impunity,犬儒主义到底是什么意思

    技术impunity,犬儒主义到底是什么意思犬儒主义者百科名片“犬儒主义”一般认为是苏格拉底的弟子安提斯泰尼创立的,另一人物第欧根尼则因为住在木桶里的怪异行为而成为更有名的犬儒主义者。当时奉行这一主义的哲学家或思想家,他

    生活 2021年10月30日
  • c指針深入理解--指針和函數

    技术c指針深入理解--指針和函數 c指針深入理解--指針和函數一、程序的栈和堆:堆:-》栈-》程序栈-》栈幀(组织)-》函数返回地址-》局部数据存储-》参数存储-》栈指针和基指针1)栈指针:通常指向栈顶

    礼包 2021年12月24日
  • 白芸豆减肥,白芸豆一天吃多少量减肥效果好

    技术白芸豆减肥,白芸豆一天吃多少量减肥效果好医学里有减肥饮食处方,分析体检报告,明确代谢紊乱环节,针对性搭配营养白芸豆减肥。医学减肥饮食处方是高品质精确化针对性的平衡膳食。肥胖绝非亚健康而是代谢紊乱性疾病。肥胖患者往往有

    生活 2021年10月19日
  • 在IDEA中如何部署一个简单的考勤补签功能

    技术在IDEA中如何部署一个简单的考勤补签功能这篇文章主要介绍了在IDEA中如何部署一个简单的考勤补签功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 

    攻略 2021年11月24日