MySQL 5.7 多主一从的复制结构
时间:2022-05-07
本文章向大家介绍MySQL 5.7 多主一从的复制结构,主要内容包括多源复制的作用、多源复制的配置、配置 master、配置 slave、启动复制、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
多源复制的作用
MySQL 5.7.6 开始,添加了一个新特性:多源复制 Multi-Source Replication
可以让你同时从多个master中并行复制,也就是形成了一种新的主从复制结构 一从多主
图
以前都是一主多从的结构,想实现一从多主的复制需要自己想办法,现在好了,直接支持了
多源复制的应用场景示例:
- 比如我们分库后有多台数据库服务器,后台统计系统需要对数据进行汇总,就可以使用多源复制实现汇总功能
- 比如我们有多个项目,分为了多台数据库服务器,想使用主从复制进行数据备份,就可以使用多源复制,把多个数据库复制到同一台服务器中,如果没有多源复制这个功能,就要自己想办法实现,增加了数据库管理难度,或者使用多个从服务器分别进行复制,增加了资源开销
多源复制的配置
多源复制支持两种主从复制方式:基于日志位置复制、基于GTID的复制
下面以GTID的方式为例,介绍配置的具体步骤
前期准备
准备3个MySQL,我的版本是 5.7.13,IP分别为:
- master1 192.168.31.221
- master2 192.168.31.207
- slave 192.168.31.158
然后检查3个MySQL的 server_uuid,确保是不同的,否则会复制失败
因为使用复制出来的两台虚机,或者在Docker中使用同一MySQL镜像的两个容器时,就会出现 uuid 相同的情况
mysql> SHOW VARIABLES like '%server_uuid%';
如果值相同,查看 my.cnf 中 datadir 的位置,其目录下有一个文件 auto.cnf,把其中的 server-uuid 值改一下,注意不要增减长度,例如把最后一个字符改下即可
配置 master
修改 master1、master2 的 my.cnf,在[mysqld]下添加:
[mysqld]
...
log-bin=mysql-bin
server-id=221
gtid_mode=on
enforce-gtid-consistency=true
...
server-id 要确保唯一,例如设为IP的尾号
保存后重新启动MySQL
然后创建用于slave复制的用户
在master1中执行
mysql> GRANT REPLICATION SLAVE ON *.* to 'master1'@'%' identified by '123456';
在master2中执行
mysql> GRANT REPLICATION SLAVE ON *.* to 'master2'@'%' identified by '123456';
配置 slave
修改 my.cnf,在[mysqld]下添加:
server_id=207
log-bin=mysql-bin
read_only=on
gtid_mode=on
enforce-gtid-consistency=true
master_info_repository=TABLE
relay_log_info_repository=TABLE
保存后重启MySQL
添加 master1、master2
mysql> CHANGE MASTER TO MASTER_HOST='192.168.31.221', MASTER_USER='master1', MASTER_PASSWORD='123456', MASTER_AUTO_POSITION = 1 FOR CHANNEL 'master-1';
mysql> CHANGE MASTER TO MASTER_HOST='192.168.31.207', MASTER_USER='master2', MASTER_PASSWORD='123456', MASTER_AUTO_POSITION = 1 FOR CHANNEL 'master-2';
启动复制
mysql> start slave;
检查复制状态
mysql> show slave statusG;
结果信息
**************** 1. row ************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.31.221
Master_User: master1
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
**************** 2. row ************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.31.207
Master_User: master2
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
可以看到出现了两个Master信息,说明多源复制成功,其中每个的 Slave_IO_Running 与 Slave_SQL_Running 都是 YES,说明复制状态是正常的
- 浅析 Linux 初始化 init 系统
- 如何提高Python运行效率 超实用的四种提速方法
- 如何让oracle的select强制走索引
- ActionScript3.0(AS3)中的泛型数组Vector
- 人民网评:“算法推荐”不能成为传播低俗信息的助推器
- 代码实现WordPress自动关键词keywords与描述description
- 基于Spring的简易SSO设计
- MS 的IOC容器(ObjectBuilder)?
- 自动驾驶五问
- 开放的即时通信协议Jabber
- AI技术五年内必将颠覆现有医疗领域?
- 初探ReactJS.NET 开发
- 详解使用hadoop2.6.0搭建5个节点的分布式集群(附代码)
- Net Framework 2.0 事务处理
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- alpine使用的避坑指南
- elasticSearch学习(八)
- Python自学成才之路 魔术方法之比较运算符,赋值运算符
- Go语言(golang)新发布的1.13中的Error Wrapping深度分析
- 使用k8s容器钩子触发事件
- Python自学成才之路 魔术方法之属性访问控制
- Python自学成才之路 彻底搞懂python变量作用域
- Python自学成才之路 什么是元类
- 调试 Go 的代码生成
- Kubernetes中的Volume介绍
- Python自学成才之路 终于弄清楚类方法,静态方法的区别了
- Git 版本及版本范围表示法
- python自学成才之路 numpy 基础
- python自学成才之路 文件读写操作
- go 中string[0]到底是rune还是byte?