【 使用环境 】生产环境
【 OB or 其他组件 】obbinlogV4.0.1 OceanBase 4.2.5.1 OBProxy4.3.2
【 使用版本 】社区版
【问题描述】使用binlog服务同步数据,同步任务中有一张表的数据来源于多张表 业务SQL如下:insert into A select * from B join C ,表A的数据来源于表B和表C。当表B里的数据记录修改后,下游是可以查到的,同步正常,但是表A的数据里的记录仍然是原记录。查看binlog实例的libcdc日志中没有 EDIAG 与 ERROR记录,全是INFO,obbinlog支持这种形式的同步吗
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
ret=-4152:
该错误出现在 get_uint 函数调用中,表示在尝试从 MySQL 结果集中获取值时失败。这可能与 binlog 数据的序列化或反序列化过程有关。
2. 问题定位
结合您的问题描述和日志内容,以下是一些可能的原因:
binlog 同步机制限制:
OceanBase 的 binlog 服务目前主要支持基于行变更的同步。对于复杂的 SQL 操作(如 INSERT INTO A SELECT * FROM B JOIN C),binlog 可能无法完全捕获所有依赖表的数据变更。因此,当表 B 的数据修改后,表 A 的记录未更新可能是由于 binlog 未正确记录相关依赖关系。
根据现有信息,OceanBase 的 binlog 服务可能无法完全支持复杂的多表关联操作(如 INSERT INTO A SELECT * FROM B JOIN C)。建议先检查 binlog 配置和表结构一致性,并尝试重启服务或升级版本。如果问题仍未解决,可以使用 OMS 工具或调整业务逻辑作为替代方案。