在基于canal实现MySQL数据库同步redis缓存时,启动服务后报错。
10:46:47:072 ERROR 51350 --- [l-client-thread] t.j.c.client.client.AbstractCanalClient : canal client 异常
com.alibaba.otter.canal.protocol.exception.CanalClientException: failed to subscribe with reason: something goes wrong with channel:[id: 0x7ad59e23, /106.19.102.107:60173 => /172.26.120.188:11111], exception=com.alibaba.otter.canal.server.exception.CanalServerException: destination:idm_mysql should start first
at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.subscribe(SimpleCanalConnector.java:240) ~[canal.client-1.1.3.jar:na]
at top.javatool.canal.client.client.AbstractCanalClient.process(AbstractCanalClient.java:74) ~[canal-client-1.2.1-RELEASE.jar:na]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_201]
查看错误日志,可以发现一段这样的描述。
com.alibaba.otter.canal.server.exception.CanalServerException: destination:idm_mysql should start first
大概意思是canal服务器异常,应该先启动destination:idm_mysql。
destination表示的是canal server的实例,默认的实例名称是example,它代表一个完整的监听实例。
这里如果有多个连接example实例的client,则只有一个client能获取mysql的数据变更通知。
所以要想不同的应用都获取变更通知,则需要连接不同的实例。
首先,我们需要在/usr/local/canal/conf/canal.properties文件作如下配置。
canal.destinations = example,example1
其次,我们需要再复制/usr/local/canal/conf下的example文件夹,并重命名为example1即可。
cd到/usr/local/canal/conf目录,复制文件夹example。
cp -r example example1
回到这里的报错。错误提示说应该先启动canal实例idm_mysql,但是我事先并没有配置实例idm_mysql,更没有启动这样的实例,所以肯定报错。
查看服务的application.yml文件中关于canal的配置。
canal:
destination: idm_mysql
server: 192.168.2.150:11111
错误一目了然,应该将配置修改为。
canal:
destination: example
server: 192.168.2.150:11111
网友评论