canal.deployer和canal-admin必须分开下载、独立部署:前者是数据同步执行引擎,后者是提供web管理界面的集群控制中心;混用旧版单体包或仅部署其一将导致启动失败或无管理界面。

canal.deployer 和 canal-admin 必须分开下载、独立部署,混用旧版单体包或只部署一个会导致启动失败或无管理界面。
别下错包:canal.deployer 和 canal.admin 是两个独立项目
官方早已拆分服务端与管理端。你看到的 startup.sh 启动的是 canal.deployer(即传统 canal-server),它不带 Web 界面;canal-admin 才提供可视化配置和监控。
常见错误是:下载了 canal.deployer-1.1.8.tar.gz,发现里面没有 admin 页面,就以为“装错了”——其实没错,只是没装 canal-admin。
- 服务端包地址(必须):
https://github.com/alibaba/canal/releases/download/canal-1.1.8/canal.deployer-1.1.8.tar.gz - 管理端包地址(推荐):
https://github.com/alibaba/canal/releases/download/canal-1.1.8/canal.admin-1.1.8.tar.gz - 解压后检查目录结构:
canal.deployer/conf/example/instance.properties存在才算对;若只有conf/canal.properties且无example目录,说明下的是旧版canal.server单体包,不兼容 MySQL 8.0+
MySQL 必须开 ROW 模式 + 显式指定认证插件
Canal 连不上 MySQL,90% 是因为 binlog-format 不是 ROW,或账号用了默认 caching_sha2_password 插件(MySQL 8.0+ 默认)。
执行这两条命令验证:
mysql -e "SHOW VARIABLES LIKE 'binlog_format';" | grep ROW mysql -e "SELECT plugin FROM mysql.user WHERE user='canal';" | grep mysql_native_password
如果第二条没输出,说明账号认证插件不对,会卡在连接阶段,日志里反复报 Access denied 或直接超时。
- 修改 MySQL 配置(
/etc/my.cnf的[mysqld]段):log-bin=mysql-bin binlog-format=ROW server-id=1 expire_logs_days=3
- 创建 Canal 用户时,必须显式指定插件:
CREATE USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal'; - 授权不能漏:
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; - 改完重启 MySQL:
systemctl restart mysqld(CentOS)或systemctl restart mysql(Ubuntu)
instance.properties 里几个参数格式错不得
canal.deployer 启动后没日志、不拉 binlog、反复重连,大概率是 conf/example/instance.properties 里这几项写错了。
-
canal.instance.master.address必须是host:port格式,例如192.168.1.100:3306—— 不能带http://,也不能写成192.168.1.100:3306/(末尾斜杠会解析失败) -
canal.instance.dbUsername和canal.instance.dbPassword要跟 MySQL 里创建的账号完全一致(注意大小写、特殊字符转义) -
canal.instance.filter.regex用 Perl 正则,库名表名要双反斜杠转义:guli\..*表示同步guli库下所有表;写成guli..*会匹配失败 - 首次启动前,建议先手动查一下 binlog 位置:
mysql -ucanal -pcanal -h your_mysql_ip -e "SHOW MASTER STATUS;",然后把File和Position值填到canal.instance.master.journal.name和canal.instance.master.position(否则可能跳过初始变更)
canal_local.properties 必须配 admin 地址才能纳管
即使只跑一个 canal.deployer 实例,只要你想用 canal-admin 管理它,就必须在 conf/canal_local.properties 里配好 admin 地址,否则 deployer 启动后无法注册,页面上看不到实例。
- 确保
canal-admin已启动(bin/startup.sh),且能通过浏览器访问http://your_host:8089 - 编辑
canal.deployer/conf/canal_local.properties,关键两行:canal.admin.manager = 192.168.1.200:8089 canal.admin.port = 8089
- 启动 deployer 时要用
sh bin/startup.sh local(不是sh bin/startup.sh),否则不读canal_local.properties - 启动后等 30 秒,刷新 admin 页面,在「集群节点」里看实例状态是否为
running
真正卡住的地方往往不是版本或命令,而是 canal.instance.master.address 多了个斜杠、canal-admin 地址没配对、或者 MySQL 账号用了默认插件却没意识到——这些细节不验证,光重启服务没用。











