首页/数据/数据工程与 ETL 速查/Canal 部署与 instance 配置
CDC 与同步53 条

Canal 部署与 instance 配置

Canal Server 部署三步:解压发布包、编辑 conf/canal.properties(serverMode 与 destinations)、编辑 conf/<destination>/instance.properties(数据源与过滤规则)。实例配置里 master 地址、账号、slaveId、filter.regex 是需要按环境调整的项,启动后看 logs 目录日志确认连接成功。

Canal 部署的三步

Canal Server 部署分三步:解压发布包、编辑 conf/canal.properties(serverMode 与 destinations 列表)、编辑 conf/<destination>/instance.properties(数据源与过滤规则)。实例配置里 master 地址、账号、slaveId、filter.regex 是要按环境调整的项;启动后看 logs 目录确认连接与位点是否正常,日志会明确写出当前拉到哪个 binlog 文件与位点。

基本信息

canal.properties定义 serverMode 与 destinations 列表
instance.properties每个 destination 一份,含数据源与过滤规则
meta.dat记录该 destination 的消费位点,不能手工删除
filter.regex按 Java 正则匹配 库.表,多个用逗号分隔

典型使用场景

  • 首次部署:配置数据源与过滤规则并验证连接
  • 新增同步库表:新增 destination 或调整 filter.regex
  • 位点丢失:meta.dat 被删后只能重做初始化
  • 多实例部署:为每个实例分配不同的 slaveId
  • 故障排查:通过日志确认连接、拉取与位点推进情况

instance.properties 关键项

instance.properties 关键项
# 示例 destination:example
canal.instance.master.address=10.0.0.5:3306    # 源库地址
canal.instance.dbUsername=canal                # 同步账号,需要 replication 相关权限
canal.instance.dbPassword=***                  # 密码不要提交到代码仓库
canal.instance.mysql.slaveId=1234              # 模拟从库 ID,多实例必须唯一
canal.instance.filter.regex=app\..*             # 只同步 app 库下的表
canal.instance.connectionCharset=UTF-8
canal.instance.gtidon=false                    # 是否按 GTID 模式解析

配置文件与作用

文件内容注意点
canal.propertiesserverMode、destinations多个 destination 用逗号分隔
instance.properties数据源、账号、slaveId、过滤规则按 destination 目录区分
meta.dat消费位点记录删除后位点丢失,需要重新初始化
logs 目录运行日志排查连接与位点推进的第一现场
改完配置需要重启 Canal Server 才生效;不要多个实例复用同一个 slaveId,否则源库侧会互相踢掉对方的复制连接。
filter.regex 用 Java 正则匹配「库名.表名」,转义写错时过滤范围会与预期完全不同:要么漏同步,要么把不该同步的库也拉进来,配好后先用小表验证一次。

上线前后的检查清单

部署完成后按顺序确认四件事:一是源库已开启 binlog 且格式为 ROW(Canal 依赖行模式解析);二是同步账号具备复制相关权限;三是日志里能看到连接成功与位点开始推进;四是下游确实收到了消息。前三项都能在 logs 目录里找到证据,第四项要实际消费一次验证。位点开始推进后建议观察一段时间再交付,避免出现「连上了但一直不推进」的隐性故障。

易错点

  • 误删 meta.dat 丢失位点,只能重做初始化,代价是一次全量导出
  • filter.regex 转义写错或漏了库表过滤,解析范围与预期不符
  • 多实例复用同一个 slaveId,源库侧连接互相踢掉,表现为主从关系反复重建
  • 同步账号权限不足(缺少 replication 相关权限),启动报错但日志位置不直观

数据来源与参考

  • Canal 官方文档(Deployer / instance 配置)
  • Canal GitHub Wiki:配置详解
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌