总算是跑起来了,看看效果吧
这是我的SQL 表里面插入数据 刷新下就可以看到已经查询出来了
canal报错nosuchmethod ..bytebuffer
解决方法:更新jdk版本与es一致
cancal报错 config dir not found
替换classpath中间封号两边的值
canal控制台乱码
将其改为GBK即可
ERROR c.a.otter.canal.adapter.launcher.loader.AdapterProcessor - java.lang.NullPointerException
网上都说是需要改yml里面的SQL,表要设置别名,然而我试了,没有效果。。。 没办法,debug源码看看,这边能看到,是别名不匹配导致的 这里为null导致的异常,一看就是个BUG,这里呢继续跟踪,追到下面能看到解析的时候使用了sqlidentifierexpr,导致owners为空 如果不想为空,需要让他走sqlpropertyexpr,那么如何让他走呢?要给所有字段加上别名才行,这样问题就解决啦
Unknown system variable 'query_cache_size'
这是因为mysql驱动包的版本过低导致的,query cache在MySQL5.7.20就已经过时了,而在MySQL8.0之后就已经被移除了 1、只需要将lib中的驱动器替换成mysql-connector-java-8.0.22.jar 2、修改驱动器权限
Reason: No converter found capable of converting from type [java.lang.String] to type [java.util.Map<java.lang.String, java.lang.String>]
启动canal-adapter报错: 观察报错信息可以得知是配置文件中的outer2(0基,所以outer-adapter[1]实际指的是2)的properties配置有问题,我们观察配置文件,发现是properties下的mode,cluster.name等属性与properties同级了,将其如下图所示后退两字符即可。
RuntimeException: java.lang.RuntimeException: No data source found: xxxx
这个因为在conf/es/xxx.yml中配置的dataSourceKey并没有在conf/application.yml中的srcDataSources中维护 如下图所示,es中的dataSourceKey需要在applicaiton.yml中设置,默认是defaultDS
Reason: Unable to set value for property src-data-sources
原因一: mysql驱动器导致的问题,使用的数据库是8.x。驱动器是5.x的,将mysql驱动替换为8.0.x版本的。如上所示报错1 原因二: 检查该报错前的日志,是否有其他相关报错信息,比如无相关数据库,如下所示,根据其报错内容来检查配置项并且调整即可
java.sql.SQLException: null, message from server: "Host '172.16.188.2' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
同一个ip在短时间内产生太多中断的数据库连接而导致的阻塞 登录对应的mysql,执行如下指令
IllegalStateException: Extension instance(name: es7, class: interface com.alibaba.otter.canal.client.adapter.OuterAdapter) could not be instantiated: class could not be found
一般 could not be instantiated: class could not be found这样的报错是配置文件的问题,如上的报错可以看到是name: es7中的错误,在官方的示例文档中使用的是name: es6 # or es7。 在canal1.1.5+版本中设置的是name: es6 # 或者es7 但在1.1.4版本中直接使用name: es即可
IllegalArgumentException: Not found the mapping info of index: user
1、这个报错是ES的mapping设置的问题,确保es中有该索引,并且确认是否有部分字段没有在es中设置mapping,这个要对应之前设置的sql,以及es中的mappings来解决 2、使用了elasticsearch 7.x,但adapter1.1.4默认支持es6.x 解决方案: (1)修改adapter源码,将es依赖调整为7.x;参考博客adapter1.1.4修改源码支持es7.x (2)换成adapter1.1.5