Docker 部署 Canal
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