docker desktop管理的mysql容器中,配置文件的位置和自己创建的不同。我使用的docker desktop中的mysql:5.7.38的版本,配置文件路径
cd /etc/mysql/mysql.conf.d
找到mysqld.cnf
vi mysqld.cnf
在配置文件中加入以下配置(server_id可以自己定义,只要不和后面配置的canal.id重复就行)
docker中没有vi命令的参考这个文章解决:docker安装vi命令
[mysqld] # 开启 binlog log-bin=mysql-bin # 选择 ROW 模式 binlog-format=ROW # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复 server_id=1二、创建canal用于读取binlog日志的mysql账户
连接自己的mysql
mysql -uroot -p
创建账号及赋予权限
# 创建账号 CREATE USER canal IDENTIFIED BY 'canal'; # 赋予账号权限 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; # 刷新权限 FLUSH PRIVILEGES;
完成这一步时,推荐重启一遍mysql的容器(个别版本权限刷新不进去)
三、配置canal的canal.propertiesdocker desktop中获取的canal容器,配置文件路径如下:
# 打开配置文件所在文件夹 cd canal-server/conf/ # 编辑配置文件 vi canal.properties # 在canal.ip上插入一行配置canal.id(不与刚才配置的server_id重复即可) canal.id = 123四、修改canal的instance.properties
cd canal-server/conf/example/ vi instance.properties
修改一下几个配置
## mysql slaveId 从节点id canal.instance.mysql.slaveId = 1234 # 写自己的mysql的ip地址(如果mysql是容器化的,用宿主机的ip+映射的端口号) canal.instance.master.address = 127.0.0.1:3306 canal.instance.tsdb.enable=true #username/password,需要改成自己创建的canal权限账号密码 canal.instance.dbUsername = canal canal.instance.dbPassword = canal canal.instance.connectionCharset = UTF-8 #table regex 正则表达式筛选监听的表 canal.instance.filter.regex = 数据库名称.表名
修改完instance.properties后,该文件夹下有个meta.dat文件需要删除,不然修改的配置可能不生效。
rm -rf meta.dat
最后,重启canal的容器。
查看是否配置成功可以查看canal的日志
tail -100 canal-server/logs/example/example.log
看到如下信息则证明成功



