MySQL多源复制实战

本文是滴滴云开源框架教程系列文章的一篇。

一、多源复制概述

MySQL多源复制使复制从库能够同时从多个源接收事务。多源复制可用于将多个服务器备份到单个服务器,合并表分片,以及将来自多个服务器的数据合并到单个服务器。

二、多源复制的配置

多源复制拓扑中的主设备可以配置为使用基于全局事务标识符(GTID)的复制或二进制日志基于位置的复制。多源复制拓扑中的从库需要基于TABLE存储,多源复制与基于FILE存储不兼容。

1、配置先决条件,从库必须是基于表的存储

#salve 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';

2、多源复制从库

基于Binlog的多源复制

`CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='rpl', MASTER_PORT=3451, MASTER_PASSWORD='' \ MASTER_LOG_FILE='master1-bin.000006', MASTER_LOG_POS=628 FOR CHANNEL 'master-1';`

基于GTID的多源复制

`CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='rpl', MASTER_PORT=3451, MASTER_PASSWORD='', \ MASTER_AUTO_POSITION = 1 FOR CHANNEL 'master-1';`

3、启动多源复制

启动所有复制源

`START SLAVE thread_types;`

启动单个复制源

`START SLAVE thread_types FOR CHANNEL channel;`

4、停止多源复制

启动所有复制源

`stop slave thread_types;`

启动单个复制源

`stop slave thread_types FOR CHANNEL channel;`

5、重置多源复制从库

要重置所有当前配置的复制通道:

RESET SLAVE;

要仅重置一个指定通道,请使用一个子句: FOR CHANNEL channel

RESET SLAVE FOR CHANNEL channel;

三、多源复制的监控

通过性能表监控

`mysql> use performance_schema;`

`Reading table information for completion of table and column names`

`You can turn off this feature to get a quicker startup with -A`

`Database changed`

`mysql> SELECT * FROM replication_connection_status\G;`

`*************************** 1. row ***************************`

`CHANNEL_NAME: master-1-63-3306`

`GROUP_NAME:`

`SOURCE_UUID: 24e8b84c-b568-11e7-b71d-44a842404e72`

`THREAD_ID: 50`

`SERVICE_STATE: ON`

`COUNT_RECEIVED_HEARTBEATS: 11418`

`LAST_HEARTBEAT_TIMESTAMP: 2018-03-27 18:20:11`

`RECEIVED_TRANSACTION_SET: 24e8b84c-b568-11e7-b71d-44a842404e72:17-19`

`LAST_ERROR_NUMBER: 0`

`LAST_ERROR_MESSAGE:`

`LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00`

`*************************** 2. row ***************************`

`CHANNEL_NAME: master-1-65-3306`

`GROUP_NAME:`

`SOURCE_UUID: b472e7b0-2dc7-11e8-880c-90b11c50d684`

`THREAD_ID: 52`

`SERVICE_STATE: ON`

`COUNT_RECEIVED_HEARTBEATS: 11416`

`LAST_HEARTBEAT_TIMESTAMP: 2018-03-27 18:19:48`

`RECEIVED_TRANSACTION_SET: 24e8b84c-b568-11e7-b71d-44a842404e72:17-19,`

`b472e7b0-2dc7-11e8-880c-90b11c50d684:4-6`

`LAST_ERROR_NUMBER: 0`

`LAST_ERROR_MESSAGE:`

`T_ERROR_TIMESTAMP: 0000-00-00 00:00:00`

`2 rows in set (0.00 sec)`

四、多源复制的限制

1、多源复制拓扑中的一个从库的最大通道数为256

2、每个复制通道必须具有唯一(非空)名称

每个复制通道都有一个唯一的名称,该名称是最长为64个字符的字符串,并且不区分大小写。由于通道名称用于从表,因此用于这些字符集的字符集始终为UTF-8

3、每个通道的中继日志文件和索引文件都被命名 ,其中是使用该选项指定的基本名称,并且是记录到此文件的通道的名称。

relay_log_basename-channel.xxxxxxrelay_log_basename

总结:

多源复制可以解决多个分片合并、关联查询的问题,但是也有其自身的缺点;

缺点:

1、日常维护难度增大

2、采用基于Binlog的复制,故障转移复杂(建议基于GTID)

3、随着源增加,从库压力越来越大

参考资料:

https://dev.mysql.com/doc/refman/5.7/en/replication-multi-source-tutorials.html

滴滴云架构和数据库技术团队在实战方面积累了丰富的经验,敬请关注本系列文章的后续分享。

本文作者:陈俊川

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值