(一)多主复制概述

所谓多主复制,是将多个主库的数据复制到一个从库中。通常用于数据仓库整合数据,比如OLTP系统为了分散业务压力,对业务进行分库分表,当要对数据进行分析的时候,可以使用多主复制将数据整合到同一个数据库实例上,便于统一分析。MySQL从5.7版本开始支持多主复制。

本文通过搭建多主复制环境来了解MySQL多主复制的特点。

 

(二)基础环境

  主库1 主库2 从库
服务器IP地址 192.168.10.11 192.168.10.12 192.168.10.13
MySQL版本 5.7.24 5.7.24 5.7.24
待同步的数据库 db1 db2 从库上创建空库db1和db2

(三)多主复制搭建

(3.1)创建用于复制的用户(主库执行)

在2个主数据库上创建用于复制的用户rep,用户需具有“replication slave”权限。每个数据库上复制账号可以不相同,这里为了测试方便,创建为相同的账号。

mysql> grant replication slave on *.* to 'rep'@'%' identified by '';

(3.2)参数修改(从库执行)

-- 重启数据库失效,建议配置在启动文件中
mysql> SET GLOBAL master_info_repository = 'TABLE';
mysql> SET GLOBAL relay_log_info_repository = 'TABLE';

(3.3)主库创建测试数据,备库创建空数据库

主库1:

mysql> create database db1;

mysql> use db1

mysql> create table test01
-> (
-> id1 int not null auto_increment,
-> name varchar(30),
-> primary key(id1)
-> ); mysql> insert into test01 values(1,'a');

主库2:

mysql> create database db2;

mysql> use db2

mysql> create table test02
-> (
-> id2 int not null auto_increment,
-> name varchar(30),
-> primary key(id2)
-> ); mysql> insert into test02 values(2,'b');

备库:

mysql> create database db1;

mysql> create database db2;

(3.4)将主库数据手动同步到备库(从库执行)

在备库上执行远程导出操作:

[root@slavedb ~]# mysqldump -uroot -p123456 -h192.168.10.  --master-data= --set-gtid-purged=OFF -P3306 db1 --single-transaction  > db1.sql
[root@slavedb ~]# mysqldump -uroot -p123456 -h192.168.10. --master-data= --set-gtid-purged=OFF -P3306 db2 --single-transaction > db2.sql

在备库上执行导入操作:

[root@slavedb ~]# mysql -h192.168.10. -P3306 -uroot -p123456 db1 < /root/db1.sql
[root@slavedb ~]# mysql -h192.168.10. -P3306 -uroot -p123456 db2 < /root/db2.sql

(3.5)开启从库同步db1(从库执行)

STEP1:确认主库1导出到的日志位置

cat db1.sql |grep "CHANGE MASTER"|less
-- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000029', MASTER_LOG_POS=;

STEP2:将主库1添加到复制环境

mysql> change master to
-> master_host='192.168.10.11',
-> master_port=3306,
-> master_user='rep',
-> master_password='',
-> master_log_file='master-bin.000029',
-> master_log_pos=1835

for channel 'ch1'

;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

STEP3:开启主库1的复制

mysql> start slave 

for channel 'ch1'

;
Query OK, 0 rows affected (0.00 sec)

(3.6)开启从库同步db2(从库执行)

STEP1:确认主库2导出到的日志位置

cat db2.sql |grep "CHANGE MASTER"|less
-- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000029', MASTER_LOG_POS=;

STEP2:将主库2添加到复制环境

change master to
master_host='192.168.10.12',
master_port=,
master_user='rep',
master_password='',
master_log_file='master-bin.000029',
master_log_pos= for channel 'ch2';

STEP3:开启主库2的复制

mysql> start slave for channel 'ch2';

(3.7)测试数据复制是否正常

主库1:

mysql> insert into test01 values(11,'aa');

主库2:

mysql> insert into test02 values(22,'bb');

备库:

mysql> select * from db1.test01;
+-----+------+
| id1 | name |
+-----+------+
| 1 | a |
| 11 | aa |
+-----+------+
2 rows in set (0.00 sec) mysql> select * from db2.test02;
+-----+------+
| id2 | name |
+-----+------+
| 2 | b |
| 22 | bb |
+-----+------+
2 rows in set (0.00 sec

数据复制正常。

(3.8)确认复制状态

mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.10.11
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000029
Read_Master_Log_Pos: 1835
Relay_Log_File: slavedb-relay-bin-ch1.000002
Relay_Log_Pos: 321
Relay_Master_Log_File: master-bin.000029
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1835
Relay_Log_Space: 534
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: caa64a22-481a-11ea-b0f1-000c29fb6200
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 8a885841-481c-11ea-bdc4-000c29840f0f:1-10,
caa64a22-481a-11ea-b0f1-000c29fb6200:1-466040
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name: ch1
Master_TLS_Version:
*************************** 2. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.10.12
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000029
Read_Master_Log_Pos: 1419
Relay_Log_File: slavedb-relay-bin-ch2.000002
Relay_Log_Pos: 321
Relay_Master_Log_File: master-bin.000029
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1419
Relay_Log_Space: 534
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 2
Master_UUID: caa64a22-481a-11ea-b0f1-000c29fb6200
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 8a885841-481c-11ea-bdc4-000c29840f0f:1-10,
caa64a22-481a-11ea-b0f1-000c29fb6200:1-466040
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name: ch2
Master_TLS_Version:
2 rows in set (0.00 sec)

【完成】

附录:

MySQL复制(replication)文档集合:

1.复制概述
2.基于二进制日志文件位置(binlog)配置复制
3.基于全局事物标识符(GTID)配置复制
4.多源复制
5.级联复制
6.半同步复制
7.延迟复制
8.复制过滤规则
9.对复制进行故障排除
10.故障切换
11.复制管理

MySQL复制(四)—多源(主)复制的更多相关文章

  1. mysql传统主从、双主复制+keepalived配置步骤

    mysql主从.主主复制(双主复制)配置步骤 一:MySQL复制: MySQL复制简介: 将master服务器中主数据库的ddl和dml操作通过二进制日志传到slaves服务器上,然后在master服 ...

  2. MySQL双主复制

    原文发表于cu:2017-06-12 本文简单介绍MySQL双主复制原理及1个简单是双主复制验证. 一.MySQL双主复制原理 1. 双主复制原理 master-master复制的两台服务器,既是ma ...

  3. MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】

    生产主主复制(A<--->B),和灾备主从复制(B--->C).当生产出现问题时,数据写入切换到灾备数据库,待生产恢复后,将灾备回写到生产.步骤如下: 1.灾备与生产其中一台建立主主 ...

  4. MYSQL的主从和主主复制模式

    一.复制介绍 MySQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录 ...

  5. MariaDB 10 (MySQL DB) 多主复制并实现读写分离

    ----本文大纲 简介 资源配置 拓扑图 实现过程 ==================== 一.简介 MMM 即Master-Master Replication Manager for MySQL ...

  6. mysql数据库主从及主主复制配置演示

    实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 实验拓 ...

  7. MySQL复制环境(主从/主主)部署总结性梳理

    Mysql复制概念说明Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves) ...

  8. MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  9. MySQL主主复制

    MySQL5. 主主复制 环境如下: CentOS6.4_64 MySQL5. master1:192.168.10.11 master2:192.168.10.12 1.1 配置 master1 a ...

随机推荐

  1. 用 Serverless 快速搭建个人相册网站

    日常生活中我们经常会拍摄一些视频.照片等,这些文件会占用比较多的存储空间.本文将介绍一种方法:利用 ThumbsUp 工具,结合 Serverless Framework 的 component 快速 ...

  2. (01)大话设计模式-简单工厂-java实现

    1.运算接口 public interface Operation { public double getResult(double NumberA , double NumberB); } 2.加减 ...

  3. AcWing 213. 古代猪文 数学知识

    传送门 题目描述: 给定整数n,q,计算 $q^{\sum_{d|n} C_{n}^{d}}$ mod 999911659. 输入格式 输入包括一行,包含两个整数n,q,用一个空格隔开. 输出格式 输 ...

  4. 005.kubernets之pods的资源限制和健康检查

    一 POD的容器资源限制 1.1 限制内容 有两个参数 QoS Class: BestEffort,表示尽可能的满足使用,级别较低,但当资源不够时,会杀掉这个容器 resources: {}这里指定为 ...

  5. OpenStack Identity API v3

    Table Of Contents OpenStack Identity API v3 What’s New in Version 3.7 What’s New in Version 3.6 What ...

  6. 2019年面试官最喜欢问的28道ZooKeeper面试题

    前言 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. ZooKeeper 的 ...

  7. 两个大数相乘 - 高精度FFT

    HDU 1402 A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  8. cf - 429D

    Iahub and Sorin are the best competitive programmers in their town. However, they can't both qualify ...

  9. 查看JVM参数

    如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体值是多少? jps jinfo jvm的参数类型: 1.标配参数:java -version  ,java -help , jav ...

  10. eclipse git导入的项目 让修改后的文件带有黑色星标记样式

    操作方式:Window——>Preferences——>Team——>Git——>Label Decorations——>Icon Decorations 将 Dirty ...