tag: canal-1.0.26-preview-2 表中有一列名:conf_key
2018-05-17 13:28:36.412 [destination = xxxxx , address = xxxxx , EventParser] ERROR c.a.otter.canal.p arse.inbound.mysql.MysqlEventParser - dump address /10.4.217.125:5002 has an error, retrying. caused by java.lang.RuntimeException: unknow column : conf_key(8) at com.alibaba.otter.canal.parse.inbound.TableMeta.getFieldMetaByName(TableMeta.java:74) ~[canal.parse-1.0.26-SN APSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.processTableElement(MemoryTableMeta.java:227 ) ~[canal.parse-1.0.26-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.parse(MemoryTableMeta.java:153) ~[canal.pars e-1.0.26-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.find(MemoryTableMeta.java:108) ~[canal.parse -1.0.26-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.compareTableMetaDbAndMemory(DatabaseTableM eta.java:289) ~[canal.parse-1.0.26-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.applySnapshotToDB(DatabaseTableMeta.java:2 51) ~[canal.parse-1.0.26-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.rollback(DatabaseTableMeta.java:129) ~[can al.parse-1.0.26-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.processTableMeta(AbstractMysqlEventParse r.java:72) ~[canal.parse-1.0.26-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:170) ~[canal.parse-1 .0.26-SNAPSHOT.jar:na] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
原提问者GitHub用户yueapple
Canal在解析MySQL binlog时,需要从MySQL数据库中获取表结构信息,并将其缓存到内存中。如果表结构发生变化,Canal会重新从MySQL数据库中获取表结构信息并更新缓存。在这个过程中,如果MySQL数据库中的表结构信息与缓存中的不一致,可能会导致表结构解析失败。
根据你提供的错误日志,可以看到Canal在解析表结构时,出现了一个java.lang.RuntimeException异常,提示“unknow column : conf_key(8)”错误。这个错误可能是由于MySQL数据库中的表结构信息与缓存中的不一致导致的。
针对这个问题,可以尝试以下几个方面进行排查:
检查MySQL数据库中的表结构信息是否正确。可以通过使用MySQL客户端连接到MySQL服务器,执行SHOW CREATE TABLE语句来查看表结构信息,并确认conf_key列是否存在。
检查Canal解析MySQL binlog时是否正确配置了MySQL数据库的用户名、密码和schema等信息。可以在Canal的配置文件中确认这些信息是否正确,尝试重新启动Canal服务。
检查Canal的版本是否与MySQL数据库的版本兼容。不同版本的MySQL可能存在差异,需要确认Canal和MySQL的版本是否一致或兼容。
尝试清除Canal缓存中的表结构信息,并重新从MySQL数据库中获取表结构信息。可以在Canal的配置文件中配置canal.instance.memoryTableMetaCache.enabled=false,然后重新启动Canal服务,让Canal重新从MySQL数据库中获取表结构信息。注意:这个操作会清除所有的表结构信息缓存,可能会影响Canal的性能和稳定性。
需要注意的是,Canal的使用比较复杂,问题的原因可能比较多,需要结合具体的环境和情况进行分析和解决。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。