多源仿制(Multi-Source Replication)开始由阿里云数据库RDS团队提出并完成的,主要在 MySQL 根据 Binary Log 单向一对多仿制的基础上,完成了节点之间的多对多的仿制,使数据能够在多个节点上自在聚合和拆分。在 MySQL 5.7.6 版别被官方录入并正式发布。
发问:假如现有业务数据库(trade)现已根据买家(buyerId)作为拆分键施行了db sharding,意味这你一切的查询有必要根据buyerId,那关于有根据卖家(sellerId)的查询需求怎么办?
是的,这的确是个难题!
一般来说能想到的办法:
保存原始映射,要先找到buyerId,在查询sellerId类需求时增加where条件buyerId
根据sellerId持续拆分,也便是说拆分键有两个:buyerId、sellerId
这些的确比较将就的计划,莫非就没有其他方法了吗?
有的,我在之前现已共享数据库主从仿制,它更多出现的是对称仿制(主从的数据与结构共同,见下图1),其实mysql最新的版别也支撑非对称仿制(而多源仿制便是其间一种体现形状,见下图2)。A8站源码交易平台

运用手册 A8站源码交易平台
1. 装备多源仿制
多源仿制拓扑至少需求装备两个主设备和一个从设备。
Master
多源仿制拓扑中的主服务器能够装备为运用根据两种方法:
1. 根据大局业务标识符(GTID)的仿制
可参看 Section 16.1.3.4, “Setting Up Replication Using GTIDs”,启用装备 gtid_mode=ON,启用一个用于仿制用户,并保证slave运用根据TABLE的仿制存储库。
运用端口3451将主机名为master1的新主机增加到名为master-1的管道中
CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='rpl', MASTER_PORT=3451, MASTER_PASSWORD='',
MASTER_AUTO_POSITION = 1 FOR CHANNEL 'master-1';
2. 根据二进制日志方位的仿制
“Setting the Replication Master Configuration” 中有运用根据文件方位的仿制的装备,启用装备--log-bin,启用一个用于仿制用户,记载在当时二进制日志方位,并保证slave运用根据TABLE的仿制存储库。
运用端口3451将主机名为master1的新主机增加到名为master-1的管道:
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';
slave
多源仿制拓扑中的从服务器需求根据TABLE的存储库。多源仿制与根据FILE的存储库不兼容。mysqld运用的存储库类型能够在发动时装备,也能够动态装备。请运用以下选项发动mysqld:--master-info-repository=TABLE --relay-log-info-repository=TABLE A8站源码交易平台
#也能够动态调整指令为:
STOP SLAVE; #假如主从仿制正在进行,需求先停掉
SET GLOBAL master_info_repository = 'TABLE';
SET GLOBAL relay_log_info_repository = 'TABLE';
设置完Master源后,发动slave进行仿制
START/STOP SLAVE; //发动或中止一切线程一切管道的仿制
START/STOP SLAVE SQL_THREAD; //发动或中止一切管道的SQL_THREAD线程
START/STOP SLAVE IO_THREAD; //发动或中止一切管道的IO_THREAD线程
RESET SLAVE; //重置一切管道
RESET SLAVE FOR CHANNEL CHANNELNAME; //重置单一管道
SHOW SLAVE STATUS //查看仿制状况
比方:
START SLAVE FOR CHANNEL 'master_3306';
START SLAVE SQL_THREAD FOR CHANNEL 'master_3306';
START SLAVE IO_THREAD FOR CHANNEL 'master_3306';
更多参看官方文档
多源仿制监督
它供给了运用仿制功能形式表来监督管道(channel)。您能够挑选监督一切管道或现有管道的一个子集。
要监督一切管道的衔接状况:SELECT * FROM replication_connection_status
*************************** 1. row ***************************
CHANNEL_NAME: master1
GROUP_NAME:
SOURCE_UUID: 046e41f8-a223-11e4-a975-0811960cc264
THREAD_ID: 24
SERVICE_STATE: ON
COUNT_RECEIVED_HEARTBEATS: 0
LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00
RECEIVED_TRANSACTION_SET: 046e41f8-a223-11e4-a975-0811960cc264:4-37
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: 7475e474-a223-11e4-a978-0811960cc264
THREAD_ID: 26
SERVICE_STATE: ON
COUNT_RECEIVED_HEARTBEATS: 0
LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00
RECEIVED_TRANSACTION_SET: 7475e474-a223-11e4-a978-0811960cc264:4-6
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00
2 rows in set (0.00 sec)
————————————————
A8站源码交易平台