MySQL多源复制可以使Slave服务器接收从多个源数据库接收事务。多源复制可用于将多个服务器备份到单个服务器,合并表分片,以及将来自多个服务器的数据合并到单个服务器。应用事务时,多源复制本身不会实现任何冲突检测或解决,需要应用程序自行实现冲突检测,以及事务冲突处理。在多源复制拓扑中,从属服务器为每个应从其接收事务的主服务器创建复制通道。
基本安装原理还是基于主从复制,先备份server1然后在server3恢复,然后再备份server2再在server3恢复。这两部分可能有冲突部分,所以需要提前人工解决。
以下二选一
mysqldump备份
mysqldump -h \
-u backup_user \
--password= \
--all-databases \
--routines --events \
--single-transaction \
--master-data > server1.sql
本文指令
mysqldump -h 192.168.200.101 \
-u root \
--password=root \
--all-databases=true \
--routines --events \
--single-transaction \
--master-data > server1.sql
mydumper备份
mydumper -h 192.168.200.101 \
-u root \
--password=root \
--use-savepoints \
--trx-consistency-only \
--kill-long-queries \
--outputdir /app/mysql/mysqldata/backup
在Server3执行恢复命令
以下方案二选一
mysql -u -p -f < server1.sql
myloader \
--directory=/backups \
--user= \
--password= \
--queries-per-transaction=5000 \
--threads=8 \
--overwrite-tables
以下二选一
mysqldump备份
mysqldump -h \
-u backup_user \
--password= \
--all-databases \
--routines --events \
--single-transaction \
--master-data > server2.sql
本文指令
mysqldump -h 192.168.200.102 \
-u root \
--password=root \
--all-databases=true \
--routines --events \
--single-transaction \
--master-data > server2.sql
mydumper备份
mydumper -h \
-u backup_user \
--password= \
--use-savepoints \
--trx-consistency-only \
--kill-long-queries \
--outputdir /app/mysql/mysqldata/backup2
在Server3执行恢复命令
以下方案二选一
mysql -u -p -f < server2.sql
myloader \
--directory=/backups \
--user= \
--password= \
--queries-per-transaction=5000 \
--threads=8 \
--overwrite-tables
STOP SLAVE; //If slave is already running
SET GLOBAL master_info_repository = 'TABLE';
SET GLOBAL relay_log_info_repository = 'TABLE';
shell> vi /etc/my.cnf
[mysqld]
master-info-repository=TABLE
relay-log-info-repository=TABLE
CHANGE MASTER TO MASTER_HOST='192.168.200.101', MASTER_USER='root', MASTER_PORT=3306, MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=2720 FOR CHANNEL 'master-1';
CHANGE MASTER TO MASTER_HOST='192.168.200.102', MASTER_USER='root', MASTER_PORT=3306, MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=3111 FOR CHANNEL 'master-2';
START SLAVE FOR CHANNEL 'master-1';
START SLAVE FOR CHANNEL 'master-2';
查询全部状态
SHOW SLAVE STATUS\G
查询单个状态
SHOW SLAVE STATUS FOR CHANNEL 'master-1' \G
查询sql
SELECT * FROM performance_schema.replication_connection_status\G
停止监听
STOP SLAVE FOR CHANNEL 'master-1';
重置监听
RESET SLAVE FOR CHANNEL 'master-2';