canal在实战过程经常会遇到这样或者那样的问题,今天我们专门用一篇文章来列举分析一下,比如、JDK版meta.dat 中保存的位点信息和数据库的位点信息不一致本不匹配、bin-log信息消费失败等问题,下面我们开始一一分析:
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比乳源网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式乳源网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖乳源地区。费用合理售后完善,10余年实体公司更值得信赖。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、
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款