怎么实现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)

相关推荐

  • 口加偏旁组成新字,“口”字加偏旁,变新字。

    技术口加偏旁组成新字,“口”字加偏旁,变新字。“口”字加偏旁能组成 口加偏旁组成新字:e799bee5baa6e997aee7ad94e58685e5aeb931333365646262中、叶 、古 、右 、占 、号 、

    生活 2021年10月27日
  • 什么是公钥、私钥、密码、助记词

    技术什么是公钥、私钥、密码、助记词 什么是公钥、私钥、密码、助记词1. 什么是公钥
    公钥:相当于钱包的地址,可理解成银行账户。拥有私钥,可以算出公钥,拥有公钥却不能算出私钥。公钥的地址(钱包的地址):可

    礼包 2021年11月26日
  • Android事件分发机制

    技术Android事件分发机制 Android事件分发机制原文链接:https://juejin.im/post/5eb3e0d6f265da7c002028cd这次说下Android中的事件分发机制从

    礼包 2021年12月7日
  • mysql事务有哪些特性

    技术mysql事务有哪些特性小编给大家分享一下mysql事务有哪些特性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简介事务是由一组sql语句

    攻略 2021年12月11日
  • 2021.46 人工智能之父

    技术2021.46 人工智能之父 2021.46 人工智能之父说起人工智能之父,很多人会想到图灵,但你用bing搜索,会发现它默认是马文·明斯基,第一个获得图灵奖的人工智能学者。马文·明斯基(1927年

    礼包 2021年11月22日
  • kafka topic 需要建立吗(怎么启动kafka)

    技术怎样认识 Kafka本篇文章为大家展示了怎样认识 Kafka,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。今天我们来聊聊 Kafka ,主要是带你重新认识一下 Kafka,聊

    攻略 2021年12月15日