阿里系一般都对开发者非常友好,它们都隐蔽了大量无需开发者关心的配置(当然了需要精细化配置的时候还是可以覆盖配置的),而Canal也延续了阿里系的传统只需简单配置就可以使用。
这次给大家介绍一下Canal的Docker部署,同样简单易懂。
1. 先下载v1.1.4版本canal-server镜像
docker pull canal/canal-server:v1.1.4
2. 完成后可以先启动一次Canal
docker run -p 11111:11111 --name canal -d canal/canal-server:v1.1.4
3. 在初次启动后,可以将容器内的instance.properties文件复制到宿主机
docker cp canal:/home/admin/canal-server/conf/example/instance.properties /Users/yuanzhenhui/Documents/docker_data/canal
4. 修改instance.properties
在我这边只做了红框标识出来的参数修改,其他的一律没变。在这里需要注意的是,用户名和密码的设置都应该与数据库的一致,且数据库已启动binlog功能。至于binlog功能的开启在过往的文章中略略有提到过,详情可以查阅过往的文章内容。
5. 删除掉原来容器后通过以下命令挂载instance.properties并启动镜像。
docker run -p 11111:11111 \
--name canal \
--ip 172.20.0.10 \
-v /Users/yuanzhenhui/Documents/docker_data/canal/instance.properties:/home/admin/canal-server/conf/example/instance.properties \
-d canal/canal-server:v1.1.4
至此,Canal就可以使用了。
遇到问题
2020-06-30 21:26:05.743 [destination = example , address = /172.17.0.2:3306 , EventParser] ERROR c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - dump address /172.17.0.2:3306 has an error, retrying. caused by
com.alibaba.otter.canal.parse.exception.CanalParseException: java.io.IOException: connect /172.17.0.2:3306 failure
Caused by: java.io.IOException: connect /172.17.0.2:3306 failure
at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.connect(MysqlConnector.java:83) ~[canal.parse.driver-1.1.4.jar:na]
at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.connect(MysqlConnection.java:89) ~[canal.parse-1.1.4.jar:na]
at com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser.preDump(MysqlEventParser.java:86) ~[canal.parse-1.1.4.jar:na]
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:183) ~[canal.parse-1.1.4.jar:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]
Caused by: java.io.IOException: caching_sha2_password Auth failed
at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.negotiate(MysqlConnector.java:257) ~[canal.parse.driver-1.1.4.jar:na]
at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.connect(MysqlConnector.java:80) ~[canal.parse.driver-1.1.4.jar:na]
... 4 common frames omitted
在初始启动的过程中发现了以上的问题,这是因为配置中连接的数据库是使用MySQL8版本,而Canal使用的是1.1.0版本。
虽然在Github中Canal配置文档说1.1.x版已经可以对接MySQL8.x版本,但通过查阅canal-server镜像中项目得知lib文件夹中MySQL驱动是5.1版本,并不存在8.x版本驱动。因此无法连接MySQL8数据库,将数据库换回MySQL5.6.8就可以了。
标签:Canal,canal,java,1.1,部署,server,parse,Docker,com From: https://blog.51cto.com/u_15761576/5914575