Docker 部署 Canal

作者: gavin 分类: Docker,未分类 发布时间: 2023-11-07 17:04

canal模拟MySQL slave 的交互协议,伪装自己为MySQL slave,向MySQL master 发送 dump 协议
MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal)
canal 解析 binary log 对象(原始为byte流)

一、配置mysql,binary log 输出

[mysqld]
server-id = 1
binlog_format = ROW
log_bin = mysql_bin

二、重启mysql,登录查看是否配置成功

#进入容器
docker exec -it mysql bash

#进入mysql
mysql -uroot -p123456

show variables like 'log_bin';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+

#出现on,就代表配置成功了

三、配置权限

grant select, replication slave, replication client on *.* to 'canal'@'%' identified by 'canal8932';

四、准备配置文件

#启动镜像
docker run -d --name canal canal/canal-server:v1.1.5

#进入容器 查看配置文件路径
docker exec -it canal bash

#找到文件位置后 exit退出容器 将容器内部文件copy到上面新建的目录中
docker cp canal:/home/admin/canal-server/conf/canal.properties /home/app/canal/conf/
docker cp canal:/home/admin/canal-server/conf/example/instance.properties /home/app/canal/conf/example/

五、修改配置文件instance.properties

#################################################
## mysql serverId , v1.0.26+ will autoGen
# canal.instance.mysql.slaveId=0

# enable gtid use true/false
canal.instance.gtidon=false

# position info
####修改数据库地址
canal.instance.master.address=127.0.0.1:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=

# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=

# table meta tsdb info
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal

#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=

# username/password

####修改用户名密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==

# table regex
####全量同步数据库
canal.instance.filter.regex=.*\\..*
"instance.properties" 59L, 2157C

六、重新运行容器

#关闭容器
docker stop canal

#移除容器
docker rm canal

#启动新容器,并挂载上面配置的相关目录
docker run --name canal -p 11111:11111 -v /home/app/canal/conf/example/instance.properties:/home/admin/canal-server/conf/example/instance.properties -v /home/app/canal/conf/canal.properties:/home/admin/canal-server/conf/canal.properties -v /home/app/canal/logs/:/home/admin/canal-server/logs/ -d canal/canal-server:v1.1.6

参考:https://blog.csdn.net/andy7_/article/details/130952931