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

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

需求:

三个业务系统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中配置是互相排斥的!为什么?看完官方的复制图解就明白了。怎么解决?







在宝蓝德 BCS(BES Cloud Suite)中,实现实例组内两个实例之间的数据同步通常涉及多个方面的配置和管理。这包括数据库层面的主主复制、应用服务的负载均衡设置以及相关的资源调度策略。 ### 数据库主主复制配置 如果使用 MySQL 作为后端数据库,则可以通过主主复制来实现数据同步: 1. **启用二进制日志**:在每个主服务器上启用二进制日志记录功能。 ```ini server-id=1 log-bin=mysql-bin auto-increment-offset=1 auto-increment-increment=2 ``` 2. **创建复制用户并授权**: ```sql CREATE USER 'replica'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES; ``` 3. **获取并导入一个主服务器的数据快照**: 使用 `mysqldump` 工具导出数据并在另一台服务器上导入。 4. **启动复制进程**: 在每台服务器上执行以下命令以指向对方的日志文件和位置。 ```sql CHANGE MASTER TO MASTER_HOST='master_host_ip', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='recorded_log_file', MASTER_LOG_POS=recorded_log_position; START SLAVE; ``` ### 应用服务配置 确保应用程序能够连接到任意一个实例,并且具备故障转移能力。可以使用如下方式: - **JDBC 连接字符串示例**: ```java jdbc:mysql:replication://host1:3306,host2:3306/dbname ``` 此处利用了 MySQL 的 Replication Driver 来支持读写分离和自动切换[^1]。 ### 资源调度与高可用性 对于更高级别的集群管理和资源调度,可考虑使用如 Keepalived 或者 Pacemaker 等工具进行 VIP 管理和服务漂移控制。此外,还可以结合负载均衡器(如 Nginx 或 HAProxy)来分发流量至不同的主实例。 ```nginx upstream backend { least_conn; server 192.168.0.10:80; server 192.168.0.11:80; } ``` 此配置允许将请求均匀分配给两个实例,从而提高系统的整体可用性和性能[^2]。 ### 定期检查与维护 定期监控复制状态及延迟情况是保证系统稳定运行的关键步骤之一。可以通过以下 SQL 查询查看从库的状态信息: ```sql SHOW SLAVE STATUS\G ``` 关注输出中的 `Seconds_Behind_Master` 字段可以帮助判断当前是否存在较大的同步延迟。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值