结构迁移的失败问题处理后,选择“恢复”后第三步全量迁移不知为何失败了

【 使用环境 】测试环境
【 OB or 其他组件 】OMS迁移工具
【 使用版本 】OceanBase4.2.1(LTS)单机版
【问题描述】结构迁移的失败问题处理后,选择“恢复”后第三步全量迁移不知为何失败了
【复现路径】1、结构迁移失败,进行了处理,部分表异常不处理跳过

2、结构迁移失败停止后,点击了“恢复”继续迁移

3、第三步全量迁移步骤失败,不知道失败原因,索引也未做迁移

@论坛小助手

根据您的描述,您在 OceanBase 4.2.1 单机版的测试环境中遇到了结构迁移失败的问题,处理后尝试恢复继续迁移,但在全量迁移阶段再次失败,且索引未迁移。为了更好地诊断这个问题,建议您使用 obdiag 工具进行日志采集,并将采集到的日志提供给我们。

日志采集场景: 数据恢复问题

日志采集命令:

obdiag gather scene run --scene=observer.recovery

根因分析场景: 无

根因分析命令: 无

请您提供以下信息以便我们更好地帮助您:

  1. 您能否提供具体的错误日志或错误码?
  2. 在迁移过程中,是否有任何特定的操作或配置变更?
  3. 您是否尝试过重新创建索引?如果尝试过,结果如何?
  4. 您的 OceanBase 集群的版本和安装目录是什么?
  5. 您是否启用了日志归档功能?如果是,请提供日志归档的相关配置。
  6. 您是否有其他相关的日志文件,例如 observer.logrs_svr.log

通过这些信息,我们可以更准确地定位问题并提供解决方案。感谢您的配合!

更多信息请查看:

  1. 4500 ~ 4999
  2. 4000 ~ 4499
  3. 物理恢复失败
  4. 700.7000-7999-of-mysql-mode.md
  5. 使用 ChunJun 从 MySQL 数据库迁移数据到 OceanBase 数据库

附上敏捷诊断工具 obdiag 使用帮助链接

1 个赞

查看一下 组件监控 根据下面的截图 找一下error日志

1 个赞



sysstat_127.0.0.1_20241107145715.zip (40.9 KB)

@论坛小助手

1 个赞

根据您提供的日志和图片信息,我们可以看到在全量迁移过程中出现了以下问题:

  1. 日志信息

    • 日志中提到 event source process failed: [ not support parse createFunction ],这表明在处理某些 DDL 语句时,OMS 不支持解析 CREATE FUNCTION 语句。
    • 具体的 DDL 语句如下:
      CREATE DEFINER="user" FUNCTION `func_encode_userpassword`(v_password varchar(100), v_userid varchar(100)) RETURNS varchar(100) CHARSET utf8
      SQL SECURITY INVOKER
      BEGIN RETURN UPPER(MD5(CONCAT(v_userid,'|',v_password))); END
      
  2. 问题分析

    • OMS 在处理 CREATE FUNCTION 语句时遇到了不支持的情况,导致全量迁移失败。
    • 这种情况通常是由于 OMS 当前版本不支持某些特定的 DDL 语句,特别是存储过程和函数。

解决方案

  1. 手动处理

    • 您可以手动在目标 OceanBase 数据库中创建这些函数。具体步骤如下:
      1. 登录到目标 OceanBase 数据库:
        obclient -h<目标IP> -P<端口> -u<用户名>@<租户名> -p<密码>
        
      2. 创建函数:
        CREATE DEFINER="user" FUNCTION `func_encode_userpassword`(v_password varchar(100), v_userid varchar(100)) RETURNS varchar(100) CHARSET utf8
        SQL SECURITY INVOKER
        BEGIN RETURN UPPER(MD5(CONCAT(v_userid,'|',v_password))); END
        
  2. 忽略这些对象

    • 如果这些函数不是必须的,您可以选择忽略它们,继续进行全量迁移。在 OMS 中,您可以配置忽略某些对象的迁移。
  3. 升级 OMS

    • 如果可能,您可以考虑升级 OMS 到最新版本,看看是否已经修复了对 CREATE FUNCTION 语句的支持。

操作步骤

  1. 手动创建函数

    • 登录到目标 OceanBase 数据库:
      obclient -h127.0.0.1 -P2881 -uroot@mysql -p
      
    • 创建函数:
      CREATE DEFINER="user" FUNCTION `func_encode_userpassword`(v_password varchar(100), v_userid varchar(100)) RETURNS varchar(100) CHARSET utf8
      SQL SECURITY INVOKER
      BEGIN RETURN UPPER(MD5(CONCAT(v_userid,'|',v_password))); END
      
  2. 重新启动全量迁移

    • 在 OMS 中,重新启动全量迁移任务。

验证

  • 在全量迁移完成后,验证数据是否正确迁移,特别是那些依赖于这些函数的表和数据。

如果您在手动创建函数或重新启动全量迁移过程中遇到任何问题,请随时联系我们。希望这些步骤能帮助您解决问题!

详情请参考:

  1. 查看数据同步任务的详情

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

1 个赞

看着是创建函数失败了 把下面的日志 发一下 上面的日志比较少
日志路径:/home/ds/store/store7101/log/libobcdc.log

1 个赞

怎么配置忽略函数对象?

@论坛小助手

这个路径不存在

1 个赞

你用find查找一下libobcdc.log这个日志文件 你搭建可能不在这个目录下 但是目录store{port}的端口一定是截图的端口 不一样的端口日志不一样

oms是商业版么?

是社区版。文件还是没搜到。

查看了组件监控日志看到内存不足,加上取消了增量同步环节后,最终迁移数据成功了。
感谢淇铭老师 :100:

好的 主要我看日志 你没有发全 想让你在提供一下日志 内存不足确实会有问题的