Docker 部署 Canal 的核心三步是:配置 MySQL 的 ROW 格式 Binlog、创建具备复制权限的 canal 用户、运行并配置 canal-server 容器;全程无需手动安装 Java 或编译,镜像开箱即用,10 分钟内可完成基础同步验证。
用 Docker 部署 Canal 很直接,核心是三步:配好 MySQL 的 Binlog、拉起 Canal 容器、连通两者。整个过程不需要装 Java 环境或手动编译,镜像开箱即用,10 分钟内就能跑通基础同步。
MySQL 必须开启 ROW 格式 Binlog
Canal 依赖 MySQL 的 binlog 日志,且只支持 ROW 模式——它能精确记录每一行数据的变更,避免语句级或混合模式带来的解析歧义。
启动 MySQL 容器时,通过
command
参数内联配置,例如:
--log-bin=/var/lib/mysql/mysql-bin --binlog-format=ROW --server-id=1
若已运行,需挂载自定义配置文件(如
),在
下添加:
log-bin=mysql-binbinlog-format=ROWserver-id=1binlog-row-image=FULL
进 MySQL 执行验证:
SHOW VARIABLES LIKE 'log_bin'; → 应返回 ONSHOW VARIABLES LIKE 'binlog_format'; → 应返回 ROWSHOW VARIABLES LIKE 'binlog_row_image'; → 应返回 FULL
创建 Canal 专用数据库用户
Canal 以从库身份连接 MySQL,需要具备复制权限,不能只给普通读写权限。
Docker Desktop(windows)
当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。
下载
进入 MySQL 容器执行:
CREATE USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal';
授权关键三项:
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';FLUSH PRIVILEGES;
注意
:host 用
是为方便容器间通信;生产环境建议限定为 Canal 容器 IP 或子网。
运行 Canal 容器并配置实例
官方镜像
默认启动一个示例 instance,你只需告诉它怎么连 MySQL。
拉取并运行(推荐 v1.1.7 或更新 LTS 版):
dockerrun -d \--name canal-server \-p 11111:11111 \--link mysql-canal:mysql \-e canal_server_host=mysql:3306 \-e canal_admin_user=canal \-e canal_admin_password=canal \canal/canal-server:v1.1.7
进容器修改
:
canal.instance.master.address=mysql:3306canal.instance.dbUsername=canalcanal.instance.dbPassword=canalcanal.instance.mysql.slaveId=10
(必须 ≠ MySQL 的 server-id)
重启容器使配置生效:
docker restart canal-server
验证是否连接成功
别急着写代码,先看日志确认 Canal 已“握手”MySQL。
实时查看实例日志:
docker exec -it canal-server tail -f canal-server/logs/example/example.log
正常会看到类似:
"start successful..."
和
"subscribe filter table: .*\..*"
(表示已监听所有库表)
在 MySQL 中执行一条 INSERT 或 UPDATE,几秒内日志应出现
"parse row event : ..."
行,说明增量变更已被捕获。
/etc/mysql/conf.d/my.cnf[mysqld]'%'canal/canal-serverconf/example/instance.properties