canal实战问题汇总分析

canal在实战过程经常会遇到这样或者那样的问题,今天我们专门用一篇文章来列举分析一下,比如、JDK版meta.dat 中保存的位点信息和数据库的位点信息不一致本不匹配、bin-log信息消费失败等问题,下面我们开始一一分析:

1、数据库数据改变了,但是canal 客户端没有监听到,比如:

 服务器连接正常,服务端、客户端配置也正常,那问题出在哪啊?有一个细节需要注意到:

数据库点位:

 由于我们在测试验证过程就有meta.dat文件,而且File(mysql-bin.000001)名称中间也换过,因此导致meta.dat 中保存的位点信息和数据库的位点信息不一致,导致canal抓取不到数据库的bin-log数据。

日志验证:

日志报错信息:

 核心日志:

com.alibaba.otter.canal.parse.exception.PositionNotFoundException: can't find start position for promotion
2022-12-26 12:05:27.763 [destination = promotion , address = /127.0.0.1:3306 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:promotion[com.alibaba.otter.canal.parse.exception.PositionNotFoundException: can't find start position for promotion
]

 解决方案:删除meta.dat文件,重启canal,问题解决;

 2、JDK版本过高问题:

我用canal 版本是1.1.6,JDK是11版本,服务端和客户端启动都会报一种错误:

 canal客户端服务启动也会报类似的错误,发现我的JDK版本是11,有点高了;

解决方案:换成JDK1.8就行了。

3、全量数据同步问题:

有时候我们的需求包含把历史数据也同步过去,这样怎么处理呢?首先我们确保以前的历史数据也开启了bin-log日志,即历史数据的bin-log日志存在,这样我们就可以通过设置点位,即偏移量来处理全量数据了,设置如下:修改instance.properties配置文件

 # mysql日志文件
 canal.instance.master.journal.name=mysql-bin.000001
 # 获取日志的起始位置
 canal.instance.master.position=0
 # 获取日志的起始时间戳
 # canal.instance.master.timestamp=1632881068

同时将同级目录的meta.dat删除,因为这个文件记录canal已经消费的位置等信息,删除后从零开始全量同步数据。

4、

5、

6、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值