OMS 迁移有很多主键重复报错

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】oms 社区版 4.2.13,OB社区版4.4.2
【问题描述】清晰明确描述问题

配置mysql 到 OB的数据迁移任务,OCP 中告警失败sql 数过多,查看obproxy_error.log 日志,发现3万多条insert 时 主键重复的报错,如下图,请问这个是为什么,源端mysql 不可能是重复的,那为什么迁移到ob的过程报错主键重复了呢

1 个赞

应该是OMS 向 OB 执行 INSERT 时,目标端已经存在相同主键(或唯一键)的行了。怀疑是增量数据有重叠或者目标端的表和源端的表 主键是否一致,目标表是否有上次迁移的残留数据

增量数据有重叠这个是oms 的机制吗,主键是一致的,表结构迁移过来的,目标端是新建的集群、租户,所以不会有残留数据问题,我刚才比对了下这些表的数据,根据重复主键查源端和目标端数据都是在的,并且表的count 总数也是一样的,这就很奇怪了,数据没问题,但是又有大量的报错,并且报错停留在昨晚九点左右,现在没了,所以怀疑是不是oms 有什么特殊的机制

再确定一下 你查几行数据 看看冲突的数据 目前是不是已经在目标库里了 对比数据是否一致

基本可以确定数据没问题,我把所有日志按库名.表名去重,每张表count 了一下,源端和目标端一致,然后也拿了一些重复的主键到源端和目标端查了,都存在

并且我一共配置了九个迁移任务,按库名.表名去重后发现只有其中五个任务发生了主键冲突,其他任务没发生

任务是表结构迁移 + 全量同步 + 增量同步 + 反向同步

你还有反向同步 反向同步到mysql的表数据 是正向同步的表的么?是一样的么?

是一样的,就是正常页面勾选了反向同步,同步insert + delete + update ,不同步ddl ,因为我们是要切换,为了防止切换后有问题需要切回去,所以配置了反向同步

那你这不就有问题了么 你反向同步到mysql mysql的数据在增量同步到ob 反向同步的数据 是不是正向同步的增量数据的一部分 相当于 ob存了一份数据 mysql也存一份数据 但是mysql的数据还要同步到ob中

oms 反向同步会有这个问题嘛,不应该呀,所有同步工具的反向同步功能都应该就解决了这个回环问题才对。能保证源端同步到目标端的数据不会再反向同步到源端,只有从目标端 自己写入的数据才会反向同步到源端,否则这个反向同步功能没有任何意义了

你把组件监控 截图看看 我看看几个链路




一共九个链路

你把迁移任务那里 也截个图 看看 你确定反向同步 不是新建的 是新建迁移的任务的勾选了反向了么?正常勾选了反向同步的时候 正常的会被停止的

哪个链路出问题了 截图看看

我确定反向同步不是新建的, 就是勾选的


这两个是其中报主键冲突的,其他也一样,同步任务都还正常,没报错,我是根据库来找到报冲突的任务的,下面这个是报主键冲突的库表,前面的数字数冲突次数

你这九个迁移任务 都是同一个租户么?还是是怎么设置的

是的,源端一个mysql 实例,库表太多了,oms 不是建议每个任务不要超过1000张表,就配置了九个任务迁移统一个mysql 到 同一个ob 租户

目前现在还有冲突么?ocp还在告警么?

没有了,冲突在昨晚九点左右就结束了,就想知道这个是什么原因,担心有位置问题

目前看着是纯增量阶段应该没有冲突,怀疑时并行窗口不同时, 5 个任务在 18:35 仍处于全量+增量重叠期,全量未完成时增量已启动,导致的冲突,其中4 个任务的全量已完成,没有全量+增量重叠。