记一次canal除坑记录

记一次canal除坑记录

错误信息

Caused by :com.alibaba.otter.canal.parse.exception.CanalParseException: column size is not match for table

问题处理

今天对Canal相关程序进行升级,原监听的表及业务都正常;遇到新增加的表时总是不走;
因为我们开发的程序都记过测试环境自测,所以直接从线上canal的日志开始排查问题;
canal错误日志截图:
canel错误
从错误看表字段数不对,以为时程序开很长时间了canal缓存了之前的表结构;但是canal跑了2年左右了,啥时候缓存的已经不知道了,随对canal进行重启,但是问题依旧,随针对问题进行网上检索;
找到了CanalParseException: column size is not match for table 标题和错误一致;查看和我们初步分析一致 canal缓存的表结构出现了不一致的情况;
随后依次按照文档的处理办法进行处理;

  1. 停止canal相关程序,和Canal服务;
  2. 找到conf/canal.properties 将canal.instance.tsdb.enable设置为false;
  3. 删除$CANAL_HOME/conf/目标数据库实例标识/h2.mv.db文件;
  4. 最后启动Canal服务
    启动后发现第二部的设置未达到预期,h2.mv.db文件又生成了。

Canal服务有问题?不可能;

继续排查发现在canal.properties有关于conf的配置:

canal.instance.tsdb.enable = false
canal.instance.tsdb.dir = ${canal.file.data.dir:../conf}/${canal.instance.destination:}
canal.instance.tsdb.url = jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;

说明canal不只是加载了自己的配置,还加载了实例的配置;随查了一下实例下的instance.properties配置也有关于canal.instance.tsdb.enable = true;随停止Canal服务后将这个改为false;再次重启Canel服务;当问题仍旧没有解决;
问题找到了,诸多措施仍处理问题;
网络一大搜,找到了 canal读取mysql采坑大全; 是第一条就是:

删除meta.dat删除,再重启canal,问题解决;

随对实例下的meta.dat删除,重启;
问题终于解决了。

总结

问题定位到,处理问题措施需要根据自己的实际情况,各自的配置都不一样。

资料

CanalParseException: column size is not match for table
canal读取mysql采坑大全

  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值