前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL半同步复制

MySQL半同步复制

作者头像
jeanron100
发布2019-05-15 16:15:59
1.9K0
发布2019-05-15 16:15:59
举报

要开启半同步,我们需要安装插件,基本的要求是在满足异步复制的情况下,版本在5.5以上,并且变量have_dynamic_loading为YES,即判断是否支持动态插件。

1. 半同步插件部署

在base目录下,可以很容易找到所需的插件。当前的base目录为/usr,可以根据关键字找到插件。

# find . -name "semisync_master.so"

./lib64/mysql/plugin/semisync_master.so

./lib64/mysql/plugin/debug/semisync_master.so

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

> install plugin rpl_semi_sync_master soname 'semisync_master.so';

Query OK, 0 rows affected (0.11 sec)

> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

Query OK, 0 rows affected (0.00 sec)

安装后查看mysql.plugin看看插件记录是否存在,或者使用show plugins也可以。

> select * from mysql.plugin;

+----------------------+--------------------+

| name | dl |

+----------------------+--------------------+

| rpl_semi_sync_master | semisync_master.so |

| rpl_semi_sync_slave | semisync_slave.so |

+----------------------+--------------------+

2 rows in set (0.00 sec)

当然默认半同步的开关还没有打开。

> 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_status,

Slave端检查,如下:

Rpl_semi_sync_slave_status

2. 半同步在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 |

+---------------------------------+------------+

而在MySQL 5.6中是什么设置呢,是AFTER_COMMIT。

这两个参数该怎么理解,我们先来一个基本的半同步流程图,如下图所示。

图5-6 半同步复制FATER_COMMIT流程图

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

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

图5-7 半同步复制AFTER_SYNC流程图

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档