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

相关推荐

  • CF538G

    技术CF538G CF538G不知道在哪里找到的题,感觉评不到黑,不过是 Good Tea.首先了解将坐标系翻转 $45^{\circ}$ 的 trick ,对于每个坐标 $(x,y)$,翻转后的坐标为

    礼包 2021年12月20日
  • 金牛座和什么星座最配,金牛座和什么星座最配呢

    技术金牛座和什么星座最配,金牛座和什么星座最配呢金牛座与其它星座的互动关系 最欣赏的星座-处女座 最信任的星座-狮子座金牛座和什么星座最配、射手座
    最佳学习对象-天蝎座
    最佳工作搭档-双子座
    最容易被影响星座-水瓶

    生活 2021年10月26日
  • go语言定义变量有哪几种方法(go协程方法里的变量)

    技术ABAP和Go语言的初始化操作方法是什么本篇内容主要讲解“ABAP和Go语言的初始化操作方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ABAP和Go语言的初始化

    攻略 2021年12月20日
  • Oracle的PGA与数据库连接建立的过程是什么

    技术Oracle的PGA与数据库连接建立的过程是什么本篇内容介绍了“Oracle的PGA与数据库连接建立的过程是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这

    攻略 2021年11月4日
  • 过程选择模型

    技术过程选择模型 过程选择模型前段时间看到赵玉平老师讲的关于相亲选择的问题,感觉比较有趣,希望通过概率模拟验证一下该方法的有效性。
    原链接如下,感兴趣可先了解原讲解:管理学博士是怎么硬核相亲的,过程太真

    礼包 2021年12月9日
  • 歌吟的意思,古代文人雅士的啸是什么意思

    技术歌吟的意思,古代文人雅士的啸是什么意思啸,一种歌吟方式歌吟的意思。啸,一种歌吟方式,称之为“啸”。啸不承担切实的内容,不遵守既定的格式,只随心所欲地吐露出一派风致,一腔心曲,因此特别适合乱世名士。历史上的魏晋时期多有

    生活 2021年10月27日