暂无图片
暂无图片
暂无图片
暂无图片
1
暂无图片

MySQL多源复制

原创 谭磊Terry 恩墨学院 2022-05-23
297

前提:
一定要主要多个主库之间的server-id及uuid保持不一致
这边将半同步复制统一打开或关闭

基于GTID的多源复制

过滤参数持久化到配置文件

replicate-wild-do-table = riskcontrol.inf_customer_credit
replicate-wild-do-table = market.biz_customer_incoming
replicate-wild-do-table = isop.customer_account 
复制

mydumper导出指定库指定表

mydumper -u root -p xxxx -h 100.64.102.83 -P 3307 --regex '^(riskcontrol\.inf_customer_credit\b|riskcontrol\.inf_customer\b)' -o /ftpserver/yacedb/databack/risk0415


mydumper -u root -p xxxx -h 100.64.102.86 -P 3307 --regex '^(market\.biz_customer_incoming\b|market\.biz_customer_incoming_path\b|market\.comm_mos_node\b|isop\.biz_customer_base\b|isop\.customer_account\b)' --daemon -o /ftpserver/yacedb/databack/middle0415
复制

目标实例创建对应数据库

CREATE DATABASE `riskcontrol` /*!40100 DEFAULT CHARACTER SET utf8 */;
CREATE DATABASE `market` /*!40100 DEFAULT CHARACTER SET utf8 */;
CREATE DATABASE `isop` /*!40100 DEFAULT CHARACTER SET utf8 */;
复制

导入数据

nohup myloader -u root -p xxx -h 100.64.102.132 -P 3307 -o -d /ftpserver/yacedb/databack/risk0415 &

nohup myloader -u root -p xxx -h 100.64.102.132 -P 3307 -o -d /ftpserver/yacedb/databack/middle0415/0 &
复制

手动在Slave上设置gtid_purged的值

cat metadata
set global gtid_purged='579a7fd5-674f-11e9-90a5-ccbbfe99cd79:1-280334384,e3ca0b67-6376-11e9-8a07-ccbbfe99ce07:1-246742775';
复制

配置主从同步

CHANGE MASTER TO MASTER_HOST='100.64.102.83',MASTER_USER='replic',MASTER_PASSWORD='replic_33',master_port=3307,master_auto_position=1 for channel '100.64.102.83_3307';

CHANGE MASTER TO MASTER_HOST='100.64.102.86',MASTER_USER='replic',MASTER_PASSWORD='replic_33',master_port=3307,master_auto_position=1 for channel '100.64.102.86_3307';
复制

启动Slave

start slave for channel '100.64.102.83_3307';

start slave for channel '100.64.102.86_3307';
复制

验证复制状态

show slave status for channel '100.64.102.83_3307'\G;
show slave status for channel '100.64.102.86_3307'\G;
复制

手动过滤同步

  • 只同步指定的库(全局,所有通道的库名都需填入)
stop slave sql_thread;

CHANGE REPLICATION FILTER replicate_wild_do_table =('dms.%','lifeasia.%','fwduwdb.%','grouplife2.%','customerporsit.%',',smart.%','ccr.%');
 
start slave sql_thread;
复制
  • 如果不同步某库
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE = ('db1.new%', 'db2.new%');
复制

 

过滤复制追加表同步

假如之前实现的是过滤复制,复制的是主1的db1 和 主2的db3,已经运行一段时间了。现在想增加主1上的db2,该如何实现?

具体实现方法如下:

  • 使用mysqldump 导出 db2(记录pos1),并导入多源从库。
  • 停止多源从库的sql线程(STOP SLAVE SQL_THREAD ),并记录此刻同步到主1的位置pos2。
  • 使用mysqlbinlog 将pos1 到 pos2 的变更应用到从库。(mysqlbinlog --start-position=pos1 --stop-position=pos2 -d db2 xxx.log | mysql -u -p -h -P )
  • 在线修改多源从库的过滤条件(CHANGE REPLICATION FILTER Replicate_Wild_Do_Table = ('db1.%','db2.%','db3.%');)
  • 将过滤条件同步到参数文件。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮福利君
暂无图片
2年前
评论
暂无图片 0
您好,您的文章已入选墨力原创作者计划合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
2年前
暂无图片 点赞
评论