MySQL多源复制
MySQL多源复制
MySQL多源复制使slave能够同时从多个源master接收事务。 多源复制可用于将多个服务器备份到单个服务器,合并表分片,以及将来自多个服务器的数据合并到单个服务器。 应用事务时,多源复制不会实现任何冲突检测或解决,如果需要,这些任务将留给应用程序。 在多源复制拓扑中,slave服务器应从每个接收事务的主服务器创建复制通道。 以下部分介绍如何设置多源复制。
1. 配置多源复制
介绍如何配置多源复制拓扑,并提供有关配置master和slave的详细信息。这种拓扑需要至少两个master设备和一个slave设备配置。
1.1 配置环境如下
| 类型 | IP | 端口号 | server-id | 复制通道 |
|---|---|---|---|---|
| master | 192.168.56.100 | 3306 | 1003306 | master1 |
| master | 192.168.56.100 | 3307 | 1003307 | master2 |
| slave | 192.168.56.200 | 3308 | 2003308 |
1.2 从库的重要参数配置
在多源复制中,slave需要基于TABLE的存储库。 多源复制与基于FILE的存储库不兼容。mysqld使用的存储库类型可以在启动时配置,也可以动态配置。
- 启动时配置my.cnf
master-info-repository=TABLE
relay-log-info-repository=TABLE
- 在线动态配置
STOP SLAVE;
SET GLOBAL master_info_repository = 'TABLE';
SET GLOBAL relay_log_info_repository = 'TABLE';
1.3 在Master上导出需要同步的数据库
利用mysqldump进行备份及恢复,mysqldump的使用方法见博客MySQL备份恢复
- 在master1上
mysqldump -S /tmp/mysql3306.sock --master-data=2 --single-transaction --add-drop-database --databases employees > /tmp/empdb.sql - 在master2上
mysqldump -S /tmp/mysql3307.sock --master-data=2 --single-transaction --add-drop-database --databases test > /tmp/testdb.sql - 把备份传输到slave上
scp /tmp/empdb.sql /tmp/testdb.sql mysqldb2:/data/backup/
1.4 在master上创建复制账号
在master1上
mysql> create user 'repl'@'%' identified by 'wanbin'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
在master2上
mysql> create user 'repl'@'%' identified by 'wanbin'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
1.5 备份数据导入
mysql -S /tmp/mysql3308.sock < empdb.sql
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
#出现错误
#解决方法:
mysql> reset master;
mysql -S /tmp/mysql3308.sock < empdb.sql
mysql -S /tmp/mysql3308.sock < testdb.sql
1.6 查看备份文件中Master1与Master2的binlog Pos位置
cat empdb.sql |grep "CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE='my3306_binlog.000004', MASTER_LOG_POS=194;
cat testdb.sql |grep "CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE='my3307_binlog.000011', MASTER_LOG_POS=194;
1.7 Slave进行change master操作
#创建复制账号
create user 'repl'@'%' identified by 'wanbin';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
#change master
CHANGE MASTER TO
MASTER_HOST='192.168.56.100',
MASTER_USER='repl',
MASTER_PASSWORD='wanbin',
MASTER_PORT=3306,
MASTER_LOG_FILE='my3306_binlog.000004',
MASTER_LOG_POS=194
FOR CHANNEL 'master1';
CHANGE MASTER TO
MASTER_HOST='192.168.56.100',
MASTER_USER='repl',
MASTER_PASSWORD='wanbin',
MASTER_PORT=3307,
MASTER_LOG_FILE='my3307_binlog.000011',
MASTER_LOG_POS=194
FOR CHANNEL 'master2';
1.8 开启主从复制
可以通过start slave命令开启所有复制,也可以通过 start slave for channel 来分别开启。
mysql> start slave for CHANNEL 'master1';
mysql> start slave for CHANNEL 'master2';
2. 监控多源复制
要监视复制通道的状态,需要以下选项:
使用复制Performance Schema表。 这些表的第一列是Channel_Name。 这使您可以基于Channel_Name作为键来编写复杂查询。
使用SHOW SLAVE STATUS FOR CHANNEL Channel_Name。 默认情况下,如果未使用FOR CHANNEL通道子句,则此语句显示所有通道的从站状态,每个通道一行。 标识符Channel_name将添加为结果集中的列。 如果提供了FOR CHANNEL通道子句,则结果仅显示指定复制通道的状态。
root@localhost [test] 15:46:02>SHOW SLAVE STATUS FOR CHANNEL 'master1'\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.56.100
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: my3306_binlog.000004
Read_Master_Log_Pos: 973
Relay_Log_File: mysqldb2-relay-bin-master1.000002
Relay_Log_Pos: 1103
Relay_Master_Log_File: my3306_binlog.000004
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: 973
Relay_Log_Space: 1321
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: 1003306
Master_UUID: 7390a401-b705-11e8-9ed9-080027b0b461
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: 7390a401-b705-11e8-9ed9-080027b0b461:10-13
Executed_Gtid_Set: 3a068bf8-cdeb-11e8-8176-080027b0b461:1-16,
7390a401-b705-11e8-9ed9-080027b0b461:10-13,
d934e7cb-d1d1-11e8-85ce-0800275b8a9a:1-3
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name: master1
Master_TLS_Version:
1 row in set (0.00 sec)
使用Performance Schema.replication_connection_status 表监控
root@localhost [test] 15:49:21>use performance_schema
Database changed
root@localhost [performance_schema] 15:49:43>select * from replication_connection_status\G
*************************** 1. row ***************************
CHANNEL_NAME: master1
GROUP_NAME:
SOURCE_UUID: 7390a401-b705-11e8-9ed9-080027b0b461
THREAD_ID: 44
SERVICE_STATE: ON
COUNT_RECEIVED_HEARTBEATS: 64
LAST_HEARTBEAT_TIMESTAMP: 2018-10-17 15:49:41
RECEIVED_TRANSACTION_SET: 7390a401-b705-11e8-9ed9-080027b0b461:10-13
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00
*************************** 2. row ***************************
CHANNEL_NAME: master2
GROUP_NAME:
SOURCE_UUID: 3a068bf8-cdeb-11e8-8176-080027b0b461
THREAD_ID: 47
SERVICE_STATE: ON
COUNT_RECEIVED_HEARTBEATS: 58
LAST_HEARTBEAT_TIMESTAMP: 2018-10-17 15:49:23
RECEIVED_TRANSACTION_SET: 3a068bf8-cdeb-11e8-8176-080027b0b461:14-16
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00
2 rows in set (0.00 sec)
MySQL多源复制的更多相关文章
- MySQL系列详解十:MySQL多源复制演示-技术流ken
前言 多源复制即多主一从结构,多个主服务器端的数据都会同步到后端一个从服务器上面.至于为什么要做多源复制下面的总结很到位. 1.灾备作用:将各个库汇总在一起,就算是其他库都挂了(整个机房都无法连接了) ...
- MySQL 多源复制(Mulit-Source Replication)
MySQL多源复制方案 看复制源Master_1的同步状态:SHOW SLAVE STATUS FOR CHANNEL 'Master_1'\G 查看复制源Master_2的同步状态:S ...
- (转)MySQL多源复制
原文:https://dev.mysql.com/doc/refman/5.7/en/replication-multi-source.html MySQL多源复制概述 MySQL多源复制使复制从接受 ...
- 基于Docker搭建MySQL多源复制环境
MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等. 多源复制:多源复制加入了一 ...
- MySQL多源复制【转】
什么是多源复制? 首先,我们需要清楚 multi-master 与multi-source 复制不是一样的. Multi-Master 复制通常是环形复制, 你可以在任意主机上将数据复制给其他主机. ...
- MySQL多源复制(八)
一.什么是多源复制 MySQL 5.7发布后,在复制方面有了很大的改进和提升.比如开始支持多源复制(multi-source)以及真正的支持多线程复制了.多源复制可以使用基于二进制日志的复制或者基于事 ...
- mysql多源复制安装
多源复制的意思是多主一从. 多源复制的前提是必须要开启GTID模式. master1 :192.168.1.110 master2 :192.168.1.111 slave :192.168.1.15 ...
- MySQL 5.7.9多源复制报错修复
版本:5.7.9 用5.7.9的版本搭建MySQL多源复制测试环境 开发说复制出现问题,上去看了一下: mysql> show slave status\G******************* ...
- MySQL 5.7 多源复制实践
多源复制使用场景 数据分析部门会需要各个业务部门的部分数据做数据分析,这个时候就可以用到多源复制把各个主数据库的数据复制到统一的数据库中. 在从服务器进行数据汇总,如果我们的主服务器进行了分库分表的操 ...
随机推荐
- SpringMVC之DispatcherServlet类
一.DispatcherServlet是什么 DispatcherServlet是前置控制器,配置在web.xml文件中的.拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据 ...
- vue路由的四种传值
第一种:props 配置: 组件内定义: props: ['id'] 路由映射配置,开启props:true : { path: '/user/:id', component: User, props ...
- PAT甲级——1110 Complete Binary Tree (完全二叉树)
此文章同步发布在CSDN上:https://blog.csdn.net/weixin_44385565/article/details/90317830 1110 Complete Binary ...
- .NET Core模块化
.NET Core模块化 源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com账户:ad ...
- Ubuntu里let's encrypt通配符证书的自动续期更新
环境与需求: Ubuntu云服务器上,已经做好了ssl证书的免费申请,但是证书的期限是3个月,3个月到期后必须重新申请或者更新.由于k8s集群里的服务一直在使用证书,每三个月人工更新太麻烦,所以想要配 ...
- Zepto事件模块源码分析
Zepto事件模块源码分析 一.保存事件数据的handlers 我们知道js原生api中要移除事件,需要传入绑定时的回调函数.而Zepto则可以不传入回调函数,直接移除对应类型的所有事件.原因就在于Z ...
- 如何更改Linux yum源?
centos下可以通过yum很方便快捷的安装所需的软件和库,如果yum的源不好,安装速度会非常慢,centos默认官方源似乎都是国外的,所以速度无法保证,我一直使用163的源,感觉速度不错.下面就说说 ...
- Tensorflow版Faster RCNN源码解析(TFFRCNN) (2)推断(测试)过程不使用RPN时代码运行流程
本blog为github上CharlesShang/TFFRCNN版源码解析系列代码笔记第二篇 推断(测试)过程不使用RPN时代码运行流程 作者:Jiang Wu 原文见:https://hom ...
- mysql 存储过程变量及循环的使用
1.用游标循环 BEGIN -- 定义变量 -- 定义done DECLARE done INT; -- 定义 ammeter_id_bl DECLARE ammeter_id_bl DOUBLE; ...
- Java中的switch语句——通过示例学习Java编程(8)
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=19 当我们在代码逻辑中有多个选项,而且需要为每个选 ...