canal 增量同步mysql 到ob 时update/delete 报错

【 使用环境 】测试环境
【 OB or 其他组件 】 OceanBase 4.2
【 使用版本 】
【问题描述】GitHub - oceanbase/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件 v1.1.7
在mysql数据源端存在触发器的情况下,使用canal v1.1.7 同步mysql数据到OceanBase 4.2 目标数据库,在对源端表上的update、delete 操作时,同步工具报错

【复现路径】
源数据库mysql 5.7.44-log
目标端数据库OB 4.2 社区版
Canal V1.1.7

mysql端建表和触发器语句

CREATE TABLE t1 (
id int(11) primary key not null ,
name varchar(100)
);

CREATE TABLE t1_log (
id int(11) ,
name varchar(100)
);

drop trigger if exists insert_t1_trigger;
drop trigger if exists insert_t1_trigger;
DELIMITER #
CREATE TRIGGER INSERT_T1_TRIGGER AFTER INSERT ON t1 FOR EACH ROW BEGIN
INSERT INTO t1_log(id,name)
VALUES(new.id,new.name);
END;#
DELIMITER ;

drop trigger if exists update_t1_trigger;
drop trigger if exists UPDATE_t1_TRIGGER;
DELIMITER #
CREATE TRIGGER UPDATE_T1_TRIGGER AFTER UPDATE ON t1 FOR EACH ROW BEGIN
UPDATE t1_log SET name=new.name where id=old.id;
END;#
DELIMITER ;

drop trigger if exists delete_t1_trigger;
drop trigger if exists DELETE_t1_TRIGGER;
DELIMITER #

CREATE TRIGGER DELETE_T1_TRIGGER AFTER DELETE ON t1 FOR EACH ROW BEGIN
DELETE FROM t1_log where id = old.id;
END;#
DELIMITER ;

然后设置Canal 同步到OB 4.2 版本,
在 mysql上往t1 表进行update 时候出现如图错误

在 mysql上往t1 表进行delete 时候,语句:delete from t1 where id =3
源端mysql 没问题,在OB目标端整个表的数据删除

请大佬帮忙协助排查问题,谢谢

从OB内部看,这个SQL语句被截断了

感觉像是cannal的问题

关联的单:
https://github.com/alibaba/canal/issues/4061

1 个赞

看起来增量数据没有解析到 key,所以拼 sql 时出错了,rdb 写入是必须要有 pk 的。源端有用 tsdb 吗,如果有的话先关掉试试,另外 t1_log 这个表也在同步范围内吗,是的话可以也加上 pk 试试。

源端没有用 tsdb
t1_log 这个需要同步,加上了主键也报错

感觉是解析和拼接的时候出问题了。。还得请大佬帮忙看看 这个case

是用的 ob canal 的 1.1.7 的包对吧,可以在写入端除了 rdb 类型之外加一个 logger 类型吗?这样可以在日志里把 event 打印出来,我们先看看源端解析出来的 event 有问题没有,明天我也过一下代码测试一下。

用的ob canal 的 1.1.7 。
一会测试加一个logger 类型 再测一下。感谢大佬