【Docker】通过Docker部署Canal

阿里系一般都对开发者非常友好只需要稍微配置一下就可以用了,Canal也一样只需要简单的配置就可以部署使用。

1. 先在Docker Hub中下载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. 初次启动Canal镜像后,将instance.properties文件复制到宿主机并通过挂载进行加载

docker cp \
canal:/home/admin/canal-server/conf/example/instance.properties \
/Users/yuanzhenhui/Documents/docker_data/canal

4. 修改instance.properties
【Docker】通过Docker部署Canal_第1张图片
我只对红框标识的参数进行修改。在这里需要注意的是,用户名和密码都应该与数据库的一致,且数据库应预先启用binlog功能。

5. 删除容器后在创建容器命令中挂载instance.properties文件

docker run -p 11111:11111 \
--name canal \
-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的Wiki说明中说到1.1.x版本已经可以对接MySQL8.x,但是通过查看canal-server项目得知lib文件夹中MySQL驱动还是5.1版本的,并不存在8.x版本驱动。

因此无法连接MySQL8数据库也属正常现象,这里只需要将数据库换回MySQL5.6.8就可以了。

你可能感兴趣的:(Docker,MySQL,docker,mysql)