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

Posted 雅冰石

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配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;

 

以上是关于配canal instance同步报错:java.lang.ArrayIndexOutOfBoundsException: 1的主要内容,如果未能解决你的问题,请参考以下文章

canal同步报错:Duplicate column name ‘name2‘

canal同步报错:Duplicate column name ‘name2‘

大数据Canal:使用Canal同步MySQL数据

canal同步MQ配置

canal同步报错Target column: NAME not matched

canal同步报错Target column: NAME not matched