4.2.4 OMS mysql迁移到OB增量同步报错表不存在

【 使用环境 】 测试环境
【 OB or 其他组件】 OMS
【 使用版本 】 4.2.4
【问题描述】mysql8采用oms迁移到OB 4.2.4 ,预检查、结构迁移、全量迁移都正常,但是增量迁移异常,提示表不存在,OB目标端采用的是租户root账户,用root账户访问OB,库表都是存在的,查询都正常,但是oms提示:目标端表不存在,table not existed。
表是可以访问: select count() from sys_task;
±---------+
| count(
) |
±---------+
| 186212 |
±---------+
1 row in set (0.006 sec)

请问需要如何调整
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

1 个赞

您的问题可能存在误解,实际上据我所知,增量同步报错“表不存在”的问题可能并不是因为目标端表确实不存在,而是由于其他原因导致OMS无法识别这些表。以下是一些可能的原因和解决方案:

  1. 表名大小写敏感问题:在某些情况下,MySQL和OceanBase在处理表名时可能存在大小写敏感性的差异。尽管您提到使用的是root账户,并且能够正常查询表,但OMS在处理表名时可能会受到lower_case_table_names参数的影响。请确认源端MySQL和目标端OceanBase的lower_case_table_names设置是否一致 [8]

  2. OMS配置问题:请检查OMS的任务配置,特别是涉及到表名的部分。有时候,如果在OMS的任务配置中指定了特定的表名或模式,而实际表名与配置中指定的不完全匹配,也会导致此类错误。确认OMS配置文件中是否有任何关于表名的特殊指定,并确保它们与实际表名相匹配。

  3. 增量日志问题:增量同步依赖于源端数据库的日志记录。如果源端MySQL的日志配置不当,比如没有开启binlog或者binlog格式不正确,也可能导致OMS无法正确识别增量变化 [2]。请确保MySQL开启了binlog,并且binlog格式符合OMS的要求。

  4. 权限问题:虽然您提到使用的是root账户,理论上应该有足够的权限,但还是建议检查一下OMS使用的账户是否具有对所有相关表的读取权限。有时候即使root账户也可能因为某些特定的安全设置而受限。

  5. OMS版本兼容性问题:考虑到您正在使用的OMS版本为4.2.4,建议检查是否有针对该版本已知的bug或兼容性问题。升级到最新版本的OMS可能会解决这个问题。

  6. 数据类型不匹配:如果源端和目标端的数据类型存在不匹配,尤其是在涉及DECIMAL、FLOAT或DOUBLE等类型时,可能会导致OMS在处理数据时出现问题 [8]。请检查源端和目标端的数据类型是否完全一致。

如果以上建议仍无法解决问题,建议使用obdiag工具收集更详细的诊断信息,并联系OceanBase的技术支持团队进一步排查问题。同时,也可以参考OMS官方文档中关于 [4]的章节获取更多指导。

具体信息可参考以下文档:

  1. 迁移 MySQL 数据库的数据至 OceanBase 社区版
  2. 为 MySQL 数据库开启 Binlog
  3. 使用 OMS 从 OceanBase 数据库 MySQL 租户迁移数据到 MySQL 数据库
  4. 使用 OMS 从 MySQL 数据库迁移数据到 OceanBase 数据库 MySQL 租户
  5. 新建 OceanBase-CE 数据源
  6. 使用 OMS 从 PostgreSQL 数据库迁移数据到 OceanBase 数据库 MySQL 租户
  7. OceanBase 数据库社区版 V3.1.2
  8. 容灾双活场景的数据迁移
  9. 管理控制台介绍
1 个赞

具体截图发一下,组件监控截图看一下

1 个赞

我重试了,只迁移其他几个表,这次是没问题了,应该是其中有表不满足增量迁移条件导致,但是这个报错提示太容易混淆了,而且预检查也没问题

1 个赞

能把具体报错的信息 截图发一下么 看看是不是可以优化的项

1 个赞

根据您的描述,虽然最终通过减少迁移表的数量解决了问题,但您仍然对报错提示和预检查结果感到困惑。为了更好地理解和解决这类问题,可以从以下几个方面入手:

  1. 预检查的局限性:预检查虽然可以帮助发现一些明显的迁移障碍,但它并不能覆盖所有潜在的问题。特别是在增量迁移阶段,预检查主要关注的是结构上的兼容性和基本的配置问题,而对于某些特定的数据类型或表结构的复杂情况,可能无法完全检测出来。

  2. 表结构和数据类型:某些表可能因为其特殊的结构或数据类型而不适合增量迁移。例如,如果表中存在LOB字段、复杂的索引、或者数据类型不匹配等问题,都可能导致增量迁移失败。 [3] [5]

  3. 表的主键和唯一索引:如果表没有主键或所有列具备NOT NULL的唯一键,那么在增量迁移时可能会出现重复数据的问题。此外,如果在反向增量场景中,对于UPDATE、DELETE操作采用全列匹配的方式迁移数据,也可能导致性能问题和数据一致性问题。 [3]

  4. 节点时钟同步:节点之间的时钟不同步,或者客户端与服务器之间的时钟不同步,也可能导致增量同步的延迟时间不准确。 [3] [5]

  5. 增量日志保留时间:如果创建数据迁移任务时仅配置了增量同步,那么源端数据库的本地增量日志需要保存48小时以上;如果配置了全量迁移+增量同步,则需要至少保留7天以上的增量日志。否则可能会因为无法获取增量日志而导致数据迁移任务失败。 [3]

  6. 权限问题:尽管您提到使用的是root账户,理论上应该有足够的权限,但还是建议检查OMS使用的账户是否具有对所有相关表的读取权限。有时候即使root账户也可能因为某些特定的安全设置而受限。 [4]

解决方案建议

  1. 细化预检查:在进行增量迁移前,可以尝试手动检查那些结构复杂或数据类型特殊的表,确保它们符合增量迁移的要求。

  2. 使用匹配规则:如果一次迁移的表数量较多,可以考虑使用匹配规则来选择迁移对象,而不是一次性迁移大量表。这样可以减少问题发生的概率。 [1]

  3. 查看具体的报错信息:在迁移任务页面查看具体的报错原因,通常会有更详细的错误信息,有助于定位问题所在。 [2]

  4. 调整OMS配置:如果某些表确实不适合增量迁移,可以考虑在OMS配置中排除这些表,或者单独处理这些表的数据迁移。

  5. 优化表结构:对于那些不符合增量迁移条件的表,可以考虑优化其结构,例如添加主键或唯一索引,或者调整数据类型,使其更适合增量迁移。

  6. 检查时钟同步:确保所有节点之间的时钟同步,以及客户端与服务器之间的时钟同步,避免因时钟不同步导致的增量同步问题。

希望这些建议能帮助您更好地理解和解决增量迁移过程中遇到的问题。如果仍有疑问,建议提交工单寻求技术支持的帮助。

详情请参考:

  1. OMS 社区版错误码
  2. oms_migration_failed 迁移任务失败
  3. 迁移 PostgreSQL 数据库的数据至 OceanBase 社区版
  4. 目标表不存在
  5. MySQL 数据库之间的数据迁移
  6. UPDATE
  7. Buffer 表
  8. oms_migration_delay 迁移任务延迟

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

1 个赞

数据迁移的时候选择部分表,在全量校验的阶段,报错表不存在了,报错信息如下:
错误码:

CONNECTOR-SOOO04000001

等级:

ERROR

错误信息:

Sink table not found,ErrorCode: SINK_TABLE_NOT_FOUND(), msg: huafawy.datatransfer_house map table (huafawy.datatransfer_house) is not found,Sink table not found,ErrorCode: SINK_TABLE_NOT_FOUND(), msg: huafawy.property_building map table (huafawy.property_building) is not found,

收起

错误原因:

目的端表不存在

解决方案:

  1. 确定目的端表是否存在,如果不存在需要创建该表 2. 如果目的端表存在,确定是否存在库表大小写差异,如果存在大小写差异需要查看 coordinator.dbTableCaseStrategy 参数是否设置正确。

源和目标表名都是小写,在OB中查询这两个表都是存在的:
obclient [oceanbase]> select count() from huafawy.datatransfer_house;
±---------+
| count(
) |
±---------+
| 4098 |
±---------+
1 row in set (0.019 sec)

obclient [oceanbase]> select count() from huafawy.property_building;
±---------+
| count(
) |
±---------+
| 5518 |
±---------+
1 row in set (0.031 sec)

另外组件error.log如下:
1
[2024-09-06 10:11:29.862] [ERROR] [SliceTableProvider] [skip Duplicate name tables : [huafawy.property_building, huafawy.property_building, huafawy.property_building, huafawy.property_building, huafawy.datatransfer_house, huafawy.datatransfer_house, huafawy.datatransfer_house, huafawy.datatransfer_house]]

1 个赞

这个错误还有一个可能原因是OB的元数据information_schema.tables中存在多条一样的同名表

1 个赞

确实是这样,一个表在information_schema.tables存在多条记录,这样要如何处理?

1 个赞

目前是ob的一个bug ob4.2.4已知的bug 目前没有办法绕过去 等待后续发版修复 你可以看ob的官方网站 看看什么发版 到时候升级一下ob就好了

1 个赞

这个bug列表在哪里可以看到

1 个赞


这个产品发布以后 里面有介绍

目前4.2.4是最后一个GA版本,目前存在bug,那有其他方案把mysql数据实时同步到OB吗?

后面会发布一个修复版本 4.2.4hf

你稍微再等等 目前没有其他方案 这个修复的版本应该很快就发版了 你关注一下 产品发布notelist

这个bug是4.2.4引入的吗?那之前的版本有没有这个问题,4.2.3是不是可以。我看OMS支持的版本总并没有4.2.3_CE,有4.2.3_CE版本。


4.2.4-hf版本已经发了 也可以用4.2.1.X的版本 这个是长期支持的版本 这个没有这个bug

新版本已解决,谢谢支持