private void loadBinlogChecksum() { ResultSetPacket rs = null; try { rs = query("select @master_binlog_checksum"); } catch (IOException e) { throw new CanalParseException(e); }
List columnValues = rs.getFieldValues();
if ((columnValues != null) && (columnValues.size() >= 1) && (((String)columnValues.get(0)).toUpperCase().equals("CRC32")))
this.binlogChecksum = 1;
else
this.binlogChecksum = 0;
}
以上代码是canal1.0.23中的,对于低版本的Mysql,比如mysql5.5,select @master_binlog_checksum这一句查询出的结果如下:
mysql> select @master_binlog_checksum; +-------------------------+ | @master_binlog_checksum | +-------------------------+ | NULL | +-------------------------+ 1 row in set (0.00 sec) 这样在判断的时候回出现空指针的错误,具体表现在 if ((columnValues != null) && (columnValues.size() >= 1) && (((String)columnValues.get(0)).toUpperCase().equals("CRC32")))这一行,并且会导致一直找不到位点。
而最新版本的github上的代码,已经修改为如下方式:
/** * 获取一下binlog image格式 */ private void loadBinlogImage() { ResultSetPacket rs = null; try { rs = query("show variables like 'binlog_row_image'"); } catch (IOException e) { throw new CanalParseException(e); }
List<String> columnValues = rs.getFieldValues();
if (columnValues == null || columnValues.size() != 2) {
// 可能历时版本没有image特性
binlogImage = BinlogImage.FULL;
} else {
binlogImage = BinlogImage.valuesOf(columnValues.get(1));
}
if (binlogFormat == null) {
throw new IllegalStateException("unexpected binlog image query result:" + rs.getFieldValues());
}
}
看了下,canel最新版本1.0.24中已修复, 为何otter没有及时更新下canal的版本呢
原提问者GitHub用户 whaon
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。