首批通过分布式安全可靠测评,为关键业务系统打造
通过 Canal 同步数据
更新时间:2026-05-20 20:15:24
Canal 是一个开源的数据库变更日志解析工具,主要应用于基于 MySQL 数据库的增量数据订阅和消费。Canal 主要用于实现数据的实时同步和异构系统的数据集成。
本文介绍使用 Canal 的 Canal Server 和 Canal Adapter 组件进行 OB Cloud MySQL 兼容模式租户间的数据同步。
背景信息
Canal Server
负责连接到 MySQL 数据库,模拟 MySQL slave 的行为,解析数据库的 Binlog 日志文件,提取其中的变更数据,并以一种易于处理的格式提供给下游消费。
Canal Adapter
Canal 的扩展组件,用于将 Canal Server 解析出的数据变更映射和转发到多种类型的下游数据存储,如 RDBMS(关系型数据库)、Elasticsearch、HBase 等。
更多关于 Canal 的信息,参考 Canal 的 GitHub 地址。
前提条件
在同步数据前,确认以下信息:
- 您已开启 OB Cloud MySQL 的 Binlog。更多信息,参考 操作步骤。
- 您已安装 Java 1.8 或更高版本。
- 您已安装 Canal Server。
- 您已安装 Canal Adapter。
- 您已在目标 OB Cloud 数据库中创建需要的表结构,确保它与源数据库相同。
操作步骤
按照以下步骤进行 OB Cloud MySQL 兼容模式租户间的数据同步:
开启 OB Cloud 的 Binlog 服务。 开启 Binlog 日志服务的路径:实例列表 -> 租户管理 -> Binlog 服务,点击开通即可。更多信息,参考 开通 Binlog 日志服务。
创建用于数据同步的用户。
CREATE USER '用户名'@'%' IDENTIFIED BY '密码'; GRANT SELECT ON *.* TO '用户名';配置 Canal Server。 修改
conf/example/instance.properties文件,设置 OB Cloud MySQL 的地址、端口、用户名和密码,以及待监听的数据库和表。启动 Canal 服务,并监控其日志以确保正常运行。示例配置文件如下:vi conf/example/instance.properties# 配置 OB Cloud MySQL 数据源连接信息 canal.instance.master.address=源 OB Cloud MySQL 服务器地址:端口 canal.instance.dbUsername=用户名 canal.instance.dbPassword=密码 # 其他配置项保持默认启动 Canal Server。
cd /Canal_Home/canal && sh bin/startup.sh检查日志文件确认 Canal Server 启动成功:
tail -f logs/canal/canal.log配置 Canal Adapter。 进入 Canal Adapter 的配置目录
conf,编辑application.yml配置文件,配置 rdb Adapter 属性:mode: tcp #tcp kafka rocketMQ rabbitMQ dataSourceKey: defaultDS destination: example groupId: g1 outerAdapters: - name: rdb key: mysql1 properties: jdbc.driverClassName: com.mysql.cj.jdbc.Driver jdbc.url: jdbc:mysql://目标MySQL地址:端口/目标数据库名?useUnicode=true&characterEncoding=UTF-8&useSSL=false jdbc.username: 目标数据库用户名 jdbc.password: 目标数据库密码Canal Adapter 支持多种类型的数据存储系统,每种类型都对应一个 Adapter。RDB Adapter 是 Canal Adapter 的一部分,它专门用于在关系型数据库之间同步数据。 RDB(Relational Database)映射文件示例如下:
cat conf/rdb/mytest_user.ymldataSourceKey: defaultDS destination: example groupId: g1 outerAdapterKey: mysql1 concurrent: true dbMapping: database: 源数据库名 table: 源表名 targetTable: 目标数据库.目标表名 targetPk: id: 主键字段 mapAll: true启动 Canal Adapter。
cd /Canal_Home/adapter && sh bin/startup.sh检查日志文件确认 Canal Adapter 启动成功:
tail -f logs/adapter/adapter.log验证数据同步 检查目标数据库的表,验证源数据是否已成功同步。