mysql使用canal数据同步原理调研

Canal从调研到应用

业务背景

我们有这样的一个场景,一个主系统和N个子系统,子系统之间数据隔离,主系统有全部数据。

于是针对数据同步就有了两个需求点

  • 需要可以在将N个子系统的数据实时同步到主系统
  • 需要考虑主子系统之间出现网路隔离子系统仍然正常工作可操作,再网络恢复后主子系统之间进行数据的增量同步。

在这样的背景下我们准备对阿里的canneldataX两个工具进行调研

前置条件

  • 目前canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x
  • mysql需要开启binglog
# binlog查询命令
show variables like 'log_bin';

# mysql开启binlog
[mysqld]
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
# 配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1
# 要监控的数据库名称
binlog-do-db=my-test

canal原理

canal的工作原理可以是基于主从同步,但是与主从同步不完全相同。

canal是通过伪装成从库通过dump协议从mysql拉取binlog日志,解析binlog日志并将解析后的数据应用到目标数据库

主从同步通过dump协议拉取binlog日志后,通过binlog回放来达到数据同步的目的

ps:

主从同步在断网重连的场景下,如果断网时间过长,在数据一致性这块可能会有问题(binlog位置不一致,relay log 损坏,数据冲突等原因), 需要依赖三方的工具检查和手动解决。

canal针对于断网恢复后的数据一致性问题,给出了持久化binlog同步位置信息的方案(文件或者数据库都可),以保证断网后不存在数据一致性问题

canal原理

业务场景匹配度

  • canal支持多子库往一个主库同步的情况
  • 相对于主从同步下的数据一致性问题,canal本身就给了解决方案,无需再借用第三方工具来处理

方案可行性验证

canal多库同步可行性验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值