MySQL双主(master-master)+半同步(Semisync Replication)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

环境:

主机名 主机IP 操作系统 MySQL版本
mysqlA 172.16.4.235

CentOS 6.5
2.6.32-431.el6.x86_64

mysql-community-server-5.7.5-0.6.m15.el6.x86_64
mysqlB 172.16.4.236

CentOS 6.5
2.6.32-431.el6.x86_64

mysql-community-server-5.7.5-0.6.m15.el6.x86_64


架构:

1、mysqlA和mysqlB互为主备,即双主架构Master-Master。

2、使用semisync半同步机制,保证双主数据一致。

3、只有一个Master承担写操作,另一个备用,可承担读操作,配合应用实现读写分离。

4、双主加上Keepavlied可搭建高可用MySQL集群,实现单点故障切换。(本文不涉及)


一、准备工作

1)安装最新版MySQL5.7

使用YUM安装最新版MySQL5.7:http://qicheng0211.blog.51cto.com/3958621/1593592

MySQL5.7改善了半同步复制,降低了主从数据不一致的风险。


2)修改MySQL配置文件

启动MySQL之前先修改/etc/my.cnf,增加下面的配置。

mysqlA的配置文件:

1
2
3
4
5
6
7
8
9
10
server- id  = 1
log-bin=mysql-bin     # 打开二进制日志功能,作为主库时必须设置
log-slave-updates     # 做为从库时,数据库的修改也会写到bin-log里
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = information_schema.%
replicate-wild-ignore-table = performance_schema.%
expire_logs_days=5    # 表示自动删除5天以前的binlog,可选

mysqlB的配置文件:

1
2
3
4
5
6
7
8
9
10
server- id  = 2
log-bin=mysql-bin
log-slave-updates
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = information_schema.%
replicate-wild-ignore-table = performance_schema.%
expire_logs_days=5


3)在mysqlA和mysqlB上创建专门用于Replication的账户

1
2
GRANT  REPLICATION SLAVE  ON  *.*  TO  'repl_user' @ '172.16.4.%'  IDENTIFIED  BY  'MNVq_YOg9' ;
> FLUSH  PRIVILEGES ;


二、Master-Master配置

mysqlA和mysqlB都是刚安装好的、干净的数据库,可根据下面的步骤搭建Master-Master。

1)配置mysqlA为主库
在mysqlA上配置:

1
2
3
> reset master;(清空master的binlog,平时慎用,可选)
> flush tables  with  read  lock;
> show master status;

wKiom1Sc43njuPCVAAHylRosxp0182.jpg


2)配置mysqlB为mysqlA的从库
在mysqlB上配置:

1
2
3
4
> stop slave;
> CHANGE MASTER  TO  MASTER_HOST= '172.16.4.235' , MASTER_USER= 'repl_user' , MASTER_PASSWORD= 'MNVq_YOg9' , MASTER_LOG_FILE= 'mysql-bin.000001' , MASTER_LOG_POS=120;
> start slave;
> show slave status\G

wKiom1Sc0ObCCwvfAAVTEAvBZNE531.jpg查看Slave_IO_Running和Slave_SQL_Running的状态,如果都为Yes,从库配置成功。

3)将mysqlB设为主

在mysqlB上设置:

1
2
3
> reset master;(清空master的binlog,平时慎用,可选)
> flush tables  with  read  lock;
> show master status;

wKiom1Sc43njuPCVAAHylRosxp0182.jpg


4)将mysqlA设为mysqlB的从

在mysqlA上配置:

1
2
3
4
5
> unlock tables;
> stop slave;
> CHANGE MASTER  TO  MASTER_HOST= '172.16.4.236' , MASTER_USER= 'repl_user' , MASTER_PASSWORD= 'MNVq_YOg9' , MASTER_LOG_FILE= 'mysql-bin.000001' , MASTER_LOG_POS=120;
> start slave;
> show slave status\G

wKiom1Sc01awreiPAAUuWZrW9qU421.jpg

最后在mysqlB上:

1
> unlock tables;

至此双主已经配置完成,下面配置半同步。


三、Semisync半同步配置

1)加载semisync_master和semisync_slave插件

mysqlA和mysqlB上执行:

1
2
3
> INSTALL PLUGIN rpl_semi_sync_master SONAME  'semisync_master.so' ;
> INSTALL PLUGIN rpl_semi_sync_slave SONAME  'semisync_slave.so' ;
> show variables  like  '%semi%' ;

wKioL1Sc2LWz_GURAANaexTXimc467.jpg

rpl_semi_sync_master_timeout=10000

表示主库在某次事务中,如果等待时间超过10秒,则降级为普通模式,不再等待备库。如果主库再次探测到备库恢复了,则会自动再次回到semisync模式。
rpl_semi_sync_master_wait_point=AFTER_SYNC

这个参数是MySQL5.7新增的,AFTER_SYNC工作流程:
1、客户端提交一个事务,master将事务写入binlog并刷新到磁盘,发送到slave,master等待slave反馈。
2、slave接收master的binlog,写到本地的relaylog里。发送确认信息给master。
3、当接收到slave反馈,master提交事务并返回结果给客户端。这样就保证了主从数据一致。


2)开启semisync master和slave

mysqlA和mysqlB上执行:

1
2
SET  GLOBAL  rpl_semi_sync_master_enabled = 1;
SET  GLOBAL  rpl_semi_sync_slave_enabled = 1;

并修改my.cnf,添加下面两行:

1
2
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_slave_enabled = 1

wKioL1Sc20-gmDOuAARxtqR4bHI880.jpg

我们看到semi_sync_master_status是ON的,而semi_sync_slave_status是OFF的,下面我们启动它。


3)使半同步机制生效

mysqlA和mysqlB上执行:

1
2
> stop slave;start slave;
> show status  like  '%semi%' ;

wKiom1Sc2u2hxPmOAARIz1JUSpg229.jpg

我们看到semi_sync_slave_status是ON了,已经启动。

本文转自 张斌_青岛 51CTO博客,原文链接:http://blog.51cto.com/qicheng0211/1596131


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
289 0
|
4天前
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
34 16
|
2月前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
34 1
|
3月前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
396 11
|
4月前
|
关系型数据库 MySQL Linux
mysql 主从同步 实现增量备份
【8月更文挑战第28天】mysql 主从同步 实现增量备份
60 3
|
4月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之使用CTAS同步MySQL到Hologres时出现的时区差异,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
SQL 缓存 关系型数据库
MySQL主从同步如何操作?
随着业务增长,单台MySQL服务器难以应对高并发访问和潜在的故障风险。主从同步(Master-Slave)通过读写分离提升数据库处理能力,具备多项优势:读写分离减轻主数据库压力、支持一主多从增强扩展性与高可用性、以及数据备份确保容灾恢复。MySQL利用binlog实现主从数据同步,记录所有写操作,不包含查询。binlog有三种格式:Statement(基于SQL语句)、Row(基于行更改)、Mixed(结合前两者优点)。主从复制涉及三个关键线程:主库的binlog dump thread和从库的I/O thread与SQL thread。
137 0
MySQL主从同步如何操作?
|
4月前
|
SQL 存储 关系型数据库
实时计算 Flink版产品使用问题之同步MySQL多张表的过程中,内存释放依赖于什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
SQL 存储 关系型数据库
MySQL主从同步延迟原因与解决方法
MySQL主从同步延迟原因与解决方法
712 0
|
4月前
|
SQL 关系型数据库 MySQL
mysql读写分离,主从同步
本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。