在线搭建MySQL多源复制库

        目前大部分公司的MySQL项目都已经实现了分库分表的功能,但一部分聚合数据的查询需求还需要从MySQL中实现,MySQL的多源复制功能就应运而生。

        多源复制,顾名思义,就是将多个主库的数据同步复制到一个库中。多个主库以通道CHANNEL的形式进行同步复制。

        要想使用多源复制,需要先设置两个参数:

mysql> SET GLOBAL master_info_repository = 'TABLE';

mysql> SET GLOBAL relay_log_info_repository = 'TABLE';

        这两个参数是存储的同步复制信息,如果设置成file模式,则信息是同步到外部的master.info和relay-log.inf文件中,这就有可能在数据库非正常关闭下造成数据的丢失。设置成TABLE形式,则由于Innodb类型支持事务,相对File形式的存储方式更安全。    

        在线多源复制搭建过程:

        假设多源库为51.31,现需要在这套多源库中添加同步复制51.32主库的ORDER库数据。

        1.备份主库51.32的ORDER库数据,需要注意的是备份时候要记录上主库的GTID信息

mysqldump -uroot -pXXXXX --single-transaction --master-data=2 --set-gtid-purged=on -B ORDER >/data/backup/multi.sql

        2.在多源库51.31上恢复51.32备份出的ORDER库数据

Mysql –uroot –p ORDER < multi.sql

        3.停掉所有通道的SLAVE进程并记录已经执行过的GTID信息

mysql> stop slave all;

mysql> show master status\G;

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

File: mysql-bin.001655

Position: 826502997

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set: 00b7d16f-8604-11e7-b573-1402ec0540e4:1-304807418,

015c6ea4-8604-11e7-a6a7-1402ec0540cc:1-43127553,

126e786f-12c9-11ea-b5b8-9cdc71bfe56c:1-2,

2b97ad6b-a45d-11e7-96f3-30e1715cb188:1-24,

45415155-eb94-11e7-a4f8-0242ac11000a:1,

5aecd158-8321-11e7-9a83-30e17155e4cc:1-395309607

1 row in set (0.00 sec)

        4.清空并重置多源库的复制信息,意思告诉从库各个通道都应用到哪个GTID点,这时候需要加上ORDER备份库文件中保存的GTID信息
fe4453f6-bb2d-11e8-bfc9-005056b7170a:1-1126907

mysql> reset master;

mysql> set @@GLOBAL.GTID_PURGED

='00b7d16f-8604-11e7-b573-1402ec0540e4:1-304807418,

015c6ea4-8604-11e7-a6a7-1402ec0540cc:1-43127553,

126e786f-12c9-11ea-b5b8-9cdc71bfe56c:1-2,

2b97ad6b-a45d-11e7-96f3-30e1715cb188:1-24,

45415155-eb94-11e7-a4f8-0242ac11000a:1,

5aecd158-8321-11e7-9a83-30e17155e4cc:1-395309607,

fe4453f6-bb2d-11e8-bfc9-005056b7170a:1-1126907';

        5.CHANGE并命名51.32的复制通道信息

mysql> change master to master_host='X.X.51.32',master_port=3306,master_user='rep',master_password='XXXXX',MASTER_AUTO_POSITION=1 FOR CHANNEL 'mysql-m3';

        6.重启各个SLAVE通道并检查复制状态是否正常

mysql> start slave for CHANNEL 'mysql-m3';

......

mysql -uroot -p -S /tmp/mysql.sock -e "SHOW SLAVE STATUS FOR CHANNEL 'mysql-m3'\G"|egrep "Slave_IO_Running|Slave_SQL_Running"

或者

mysql> SHOW SLAVE STATUS FOR CHANNEL 'mysql-m3'\G

        如果想要过滤或者同步特定的某一个库,需要设置参数:

replicate-ignore-db = mysql

replicate-wild-ignore-table = mysql.%

        需要特别注意的是,这两个参数需要一起设置,如果只设置replicate-wild-ignore-table,某些情况下开发环境会自带切库的动作导致复制报错。

         欢迎关注公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值