配canal instance同步报错:java.lang.ArrayIndexOutOfBoundsException: 1

一 问题描述

由于canal 1.1.4不兼容mariadb的gtid,后官网新发布的canal 1.1.5版本宣布支持mariadb的GTID,但是在验证1.1.5 canal时发现有时配置canal instance同步会报错:

java.lang.ArrayIndexOutOfBoundsException: 1

报错截图如下:

二 出错原因

通过查阅canal源代码,并debug发现,canal找gtid的时候,会去遍历该gtid所在的整个binlog文件,如果gtid_list为空,则会报上述数组索引越界的错误。而mariadb第一个binlog中的Gtid_list是空的,示例:

其余binlog的gtid_list都是非空的,记录的是上一个binlog最后执行的一个gtid,示例:

因此,当配置canal instance时,如果gtid在第一个binlog中,会出现这个问题

三 解决办法

在配置canal同步前执行flush logs;刷新binlog,确保Gtid_list非空。

四 如何避免

在安装mariadb脚本中新增刷新binlog的命令:

flush logs;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值