两个Mysql实例中的表实时复制到一个实例中的实现

本文探讨了在MySQL环境下,如何将两个实例中的表数据实时复制到第三个实例中,详细阐述了需求背景、现有状况,并提出了具体实施方案,包括配置文件的修改和复制步骤。同时提出一个关于该过程的讨论问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

三个业务系统A,B,C分别对应三个数据库实例。根据业务需要,A中的某几张表要实时同步到C中,B中的某几张表也要实时同步到C中。

现状:

数据库环境:mysql社区版5.5
三个子系统都在运行状态,且都有从库。

方案:

将A中的表同步到B中,再从B同步到C。这样A和B的数据都按照需要同步到C了。
在修改完配置文件后,需要导出数据初始化和重启B,C两个从库使配置生效(好像在5.7中就不需要了change replication filter....)

配置文件中如何实现table level的复制:

replicate_wild_do_table=xxx.tb\_% 
replicate_wild_ignore_table=xxx.tblog_% 

为了减少停机维护时间,先建立B和C的主从关系,导出B的表到C中,再建立A和B的关系,导出A的表到B中(会自动导入到C,因为B和C已经是主从关系)
另外,导出数据都在从库上做,不影响主库上的业务。

步骤:


先建立B和C之间的数据同步
step 1:导出B的2张表
mysqldump -uroot -S /opt/dbdata/mysql_3307/mysql.sock -p --databases XXX--tables tb1 tb2 > 2_tables.sql


step 2:导入到3309数据库
mysql -uroot -S /opt/dbdata/mysql_3309/mysql.sock -p  XXX< 2_tables.sql


step 3:重启3309数据库,使MIS和GSSC的主从生效
mysqladmin -uroot -S /opt/dbdata/mysql_3309/mysql.sock -p  shutdown
mysqld_multi start 3

实际操作中 产生个故障 
启动start slave报错如下
ERROR 1201 (HY000): Could not initialize master info structure; more error m
解决办法
change master to master_host='127.0.0.1',master_port=3307,master_user='XXX',master_password='XXX',master_log_file='mysql-bin.000035',master_log_pos=205154026;
 
建立A和B之间的数据同步
step 4:导出计费的表【从库】
mysql -uroot -S /opt/dbdata/mysql_3306/mysql.sock -p
stop slave;
flush tables with read lock;
show slave status \G;
记录下Relay_Master_Log_File   Exec_Master_Log_Pos  
mysql-bin.000032   243832422


step 5:导出表(大小5G)
mysqldump -uroot -S /opt/dbdata/mysql_3306/mysql.sock -p --databases XXX--tables  XXX >XXX.sql
耗时:<1分钟

step 6:CP数据
scp XXX.sql root@17.22.22.22:/root/


step 7:重启B数据库
mysqladmin -uroot -S /opt/dbdata/mysql_3307/mysql.sock -p shutdown
mysqld_multi start 1
stop slave;

step 8:在B中导入数据
mysql -uroot -S /opt/dbdata/mysql_3307/mysql.sock -p xxx <xxx.sql

导入的数据相当于一主三从,耗时:大概15MIN

step 9:改变同步位置  以下俩值参考step 4
change master to master_log_file='mysql-bin.000032',master_log_pos=243832422;
show slave status \G;
start slave;
完成!


一个值得讨论的问题:

replicate_wild_do_table=xxx.tb\_% 
replicate_wild_ignore_table=xxx.tb_log_% 
这2中配置是互相排斥的!为什么?看完官方的复制图解就明白了。怎么解决?







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值