跨互联网数据同步进阶
简介
CloudCanal 推出 跨互联网安全数据同步 方案之后,有一些商业客户落地,效果良好,不过客户也反馈了一些改进和新需求,其中最大的一个需求即双向同步防循环。
近期 CloudCanal 版本支持了这个特性,整体方案进一步升级,最大特点包括:
- 两端数据库完全不开放公网端口
- 两端数据库可双向同步,无循环
- 两端数据库元数据可映射
- 具备传输安全和鉴权
- 不依赖消息等软件
技术点

防循环
我们复用了 CloudCanal 处理 MySQL 双向同步防循环逻辑, 写入对端时, SQL 自动带上 /*ccw*/ 标记。
再打开 MySQL binlog_rows_query_log_events 参数, 将 binlog DML 事件顺序变成 QueryEvent(TxBegin)、TableMapEvent、RowsQueryLogEvent、WriteRowEvent(IUD)、QueryEvent(TxEnd)。
其中 RowsQueryLogEvent 中的 SQL 如果带有 /*ccw*/ ,则为循环事件, 进行过滤。从而达到防循环目的。
操作示例
数据源准备
-
使用阿里云杭州和上海 RDS for MySQL
- 打开 binlog_rows_query_log_events 参数,binlog 事件带上原始 SQL
- 数据库不开公网端口
- 数据走互联网, 采用 HTTPS 传输和用户名密码认证。
-
初始化两边数据库表结 构(如需要)
CloudCanal 准备
-
杭州环境部署 CloudCanal ,并购买 RDS for MySQL

-
上海环境部署 CloudCanal , 并购买 RDS for MySQL

-
CloudCanal docker 安装包解压后 ,需 修改 docker-compose.yml 端口映射再安装/升级,以 18443 端口为例

-
开放 ECS 安全组相关端口,以便远程连接,以 18443 端口为例
