环境:
canal 版本 1.1.6
报错日志:
2023-12-13 09:50:00.135 [MultiStageCoprocessor-Parser-pre_db_tbl_job-0] ERROR com.alibaba.otter.canal.common.utils.NamedThreadFactory - from MultiStageCoprocessor-Parser-pre_db_tbl_job-0
com.alibaba.otter.canal.parse.exception.CanalParseException: com.alibaba.otter.canal.parse.exception.CanalParseException: com.alibaba.otter.canal.parse.exception.CanalParseException: parse row data failed.
Caused by: com.alibaba.otter.canal.parse.exception.CanalParseException: com.alibaba.otter.canal.parse.exception.CanalParseException: parse row data failed.
Caused by: com.alibaba.otter.canal.parse.exception.CanalParseException: parse row data failed.
Caused by: com.alibaba.otter.canal.parse.exception.CanalParseException: column size is not match for table:position.tbl_job,89 vs 87
表示canal存储的元数据对这张表的记录字段不一致,之前是87个字段,现在是89。
处理思路:
找到canal.properties文件,查看canal.instance.tsdb.url信息,
如果canal.instance.tsdb.url用的是jdbc:h2,那么可以在主机上找到h2.mv.db文件,进行删除
如果canal.instance.tsdb.url用的是jdbc:mysql 那么需要到mysql的库里,删除元数据。
delete from canal_tsdb.meta_snapshot WHERE destination = 'tbl_job';
delete from canal_tsdb.meta_history WHERE destination = 'tbl_job';
因为这是一个集群模式,使用zookeeper存储位点,因此也需要到zk里删除对应的存储位点
[zk: localhost:2181(CONNECTED) 4] ls /otter/canal/destinations/tbl_job
[1001, cluster]
[zk: localhost:2181(CONNECTED) 5] deleteall /otter/canal/destinations/tbl_job
[zk: localhost:2181(CONNECTED) 6] ls /otter/canal/destinations/tbl_job
Node does not exist: /otter/canal/destinations/tbl_job
最后到canal的界面重启instance。