一、mysql开启binlog日志
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.properties
docker 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
看到如下信息则证明成功