ERROR c.a.o.c.parse.inbound.mysql.MysqlMultiStageCoprocessor - DmlParserStage on event error
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:aaa.ccccc_2023-12-16,42 vs 1
2023-12-16 00:41:42.283 [MultiStageCoprocessor-Parser-porter_1835-1] ERROR com.alibaba.otter.canal.common.utils.NamedThreadFactory - from MultiStageCoprocessor-Parser-porter_1-1
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.
canal任务一直正常运行突然报错。看日志提示表字段对应不上,查看源码表结构检查规则。在分表情况下,canal会把每张分表的表结构同步到mysql中每次表结构变更也会同步当进行数据同步时会进行表结构检查。检查的是最早的一条,当有表结构变更时就会出错。
canal 启动时会把监控的表同步到mysql中,当监控到符合任务的表时也会写入mysql中同时也会写入缓存中,当canal重启时会自动加载。
起因:由于任务时按天分表业务方会提前三天创建表。中间业务增加一个字段,在同步到当天数据时表结构检查失败。
问题时间点:
13号:创建tb_202315
14号:创建(tb_202316)修改tb_14,tb_15,tb_202315
15号凌晨:报错
处理:删除旧的表结构信息表明meta_history 重启canal