导数报错The value of primary key "platform_no" is null

【 使用环境 】生产环境
【 OB or 其他组件 】导数工具
【 使用版本 】ob-loader-dumper-4.2.1-RELEASE.zip
【问题描述】导出数据时报错 [ERROR] Splitting rows for non-partitioned table: “device_alarm_data” failed.
Reason: The value of primary key “platform_no” is null 但是我们这个表的主键是id 列并非platform_no列,麻烦看下是否缺陷,如何解决?
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

1 个赞

这个我也遇到过几次,避免方法是用其他版本的ob-loader-dumper,我现在在生产环境都是好几个版本混用,不同租户用不同的版本 :sob:

2 个赞

@论坛小助手

1 个赞

根据您提供的错误信息,报错原因为表 device_alarm_data 的主键 platform_no 的值为 null。然而,您提到该表的实际主键是 id 列而非 platform_no 列。从提供的 SQL 创建表语句来看,表 device_alarm_data 确实没有定义 platform_no 为主键,因此这应该是一个工具误报或者配置问题。

解决方法:

  1. 检查工具配置:请检查 ob-loader-dumper 的配置文件或命令行参数,确保指定了正确的主键列。如果有配置文件,检查 primary_key 或类似参数的设置。
  2. 工具版本更新:您使用的版本是 ob-loader-dumper-4.2.1-RELEASE.zip,建议检查是否有更新版本,可能存在已修复的类似问题。
  3. 手动指定主键:在命令行中手动指定主键列,例如:
    ./obdumper --thread=1 -h <host> -P <port> -u <user> -t <tenant> -d <database> -f <file_path> --primary-key=id
    
  4. 联系技术支持:如果以上方法都无法解决问题,建议联系 OceanBase 的技术支持团队,提供详细的错误日志和配置文件,以便进一步排查。

希望以上信息能帮助您解决问题。

更多信息请查看:

  1. 使用 OceanBase 导数工具在 OceanBase 集群 MySQL 租户间迁移数据
  2. 常见的 SQL 调优方式
  3. 阅读和管理 OceanBase 数据库 SQL 执行计划
1 个赞

oceanbase备份错误 - #9,来自 旭辉 应该是跟这个问题一样,升级一下导数工具。

2 个赞

好的

1 个赞

实在看不出来这个varchar类型会有什么问题