MySQL 5.7 多主一从的复制结构

多源复制的作用

MySQL 5.7.6 开始,添加了一个新特性:多源复制 Multi-Source Replication

可以让你同时从多个master中并行复制,也就是形成了一种新的主从复制结构 一从多主

以前都是一主多从的结构,想实现一从多主的复制需要自己想办法,现在好了,直接支持了

多源复制的应用场景示例:

  1. 比如我们分库后有多台数据库服务器,后台统计系统需要对数据进行汇总,就可以使用多源复制实现汇总功能
  2. 比如我们有多个项目,分为了多台数据库服务器,想使用主从复制进行数据备份,就可以使用多源复制,把多个数据库复制到同一台服务器中,如果没有多源复制这个功能,就要自己想办法实现,增加了数据库管理难度,或者使用多个从服务器分别进行复制,增加了资源开销

多源复制的配置

多源复制支持两种主从复制方式:基于日志位置复制、基于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 status\G;

结果信息

**************** 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_RunningSlave_SQL_Running 都是 YES,说明复制状态是正常的

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2016-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xiaoheike

Tomcat生成的session持久化到MySQL

The default Tomcat default session storage mechanism uses temporary files. To sa...

11340
来自专栏杨建荣的学习笔记

MySQL迁移文件的小问题(r8笔记第18天)

线上有一台服务器上,里面有一个mysql数据库服务,其实库也很小,就几个G,一直以来是保留了多天的备份集,但是因为业务的关系,这个库其实只有一些 基本的数据查询...

38670
来自专栏乐沙弥的世界

Oracle 密码文件

DBA用户:具有sysdba,sysoper权限的用户被称为dba用户。默认情况下sysdba角色中存在sys用户,sysoper角色中存在system用户

13740
来自专栏张戈的专栏

[svn: E155004]svn update报database is locked错误的解决办法

今天突然发现项目更新脚本在拉代码的时候抛出了一个如下错误: svn: E155004: Working copy '/home/svn/***/trunk/st...

1.3K80
来自专栏搜云库

CentOs7.3 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析

CentOs7.3 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析 概念 主从复制可以使MySQL数据库主服务器的主数据库,复制到一个或多个My...

29650
来自专栏乐沙弥的世界

Oracle健康监控及健康检查(Health Monitor)

Oracle数据库包括一个名为Health Monitor的框架,用于运行诊断检查数据库的各种组件。Oracle健康监视器检查各种组件数据库,包括文件,内存,事...

26200
来自专栏FreeBuf

新手指南:DVWA-1.9全级别教程之SQL Injection

目前,最新的DVWA已经更新到1.9版本(点击原文查看链接),而网上的教程大多停留在旧版本,且没有针对DVWA high级别的教程,因此萌发了一个撰写新手教程的...

52180
来自专栏乐沙弥的世界

理解 using backup controlfile

        using backup controlfile 通常用于恢复由于当前控制文件丢失且原来备份的控制文件较当前发生变化的情形之下。using ba...

11530
来自专栏散尽浮华

mysqldump数据导出问题和客户端授权后连接失败问题

1,使用mysqldump时报错(1064),这个是因为mysqldump版本太低与当前数据库版本不一致导致的。 mysqldump: Couldn't exe...

25490
来自专栏张善友的专栏

学习笔记]快速开发Hibernate

樊欢 java及开源项目爱好者。     Email :heydaymail@hotmail.com     Blog :http://heyay.blogon...

22160

扫码关注云+社区

领取腾讯云代金券