使用导数工具导入报错

【 使用环境 】 测试环境
【 OB or 其他组件 】ob 4.2.5.2
【 使用版本 】4.3.3
【问题描述】2025-04-08 09:30:08 [INFO] Parsed args:
[–sql] true
[–file-path] /disk_d/meiyang/back/mhsb_test_2
[–host] 192.168.0.139
[–port] 2881
[–user] root@mhsb_root
[–password] ******
[–database] mhsb_test_1
[–sys-user] root
[–all] true

2025-04-08 09:30:08 [WARN] The Java version (1.8.0_171) you are currently using is not recommended. Recommended range: [1.8.0_300, 9.0.0)
2025-04-08 09:30:09 [INFO] Log files will be written to /disk_d/meiyang/back/mhsb_test_2/logs
2025-04-08 09:30:09 [INFO] Trying to establish JDBC connection to root@mhsb_root
2025-04-08 09:30:10 [INFO] Server Mode: OBMYSQL-4.2.5.2
2025-04-08 09:30:10 [INFO] Querying table column metadata, this might take a while…
2025-04-08 09:30:10 [WARN] No table to proceed for schema: “mhsb_test_1”
2025-04-08 09:30:10 [ERROR] Load failed! Error: The base tables (non temporary) are not found in the schema: mhsb_test_1. Please check the --table option!
2025-04-08 09:30:10 [ERROR] System exit 1

【复现路径】尝试过重新创建数据库,使用ddl、之类都不行
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

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

根因分析场景: SQL 执行出错
根因分析命令: obdiag rca run --scene=sql_execution_error --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

日志采集场景: SQL 执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

推荐您使用 obdiag 工具进行根因分析和日志采集,以便确认问题所在。上述命令将帮助我们收集与 SQL 执行相关的错误信息,并定位为何在目标 schema 中未找到基础表。

请您执行上述命令后,将生成的日志压缩包提供给我们以进一步分析。同时,为了更好地了解问题背景,请您回答以下问题:

  1. 是否确认 schema mhsb_test_1 已正确创建?如果已创建,请检查其权限设置是否正确。
  2. 在导入数据之前,是否已经通过其他工具或脚本创建了所需的表?如果有,请提供相关表的创建语句。
  3. 导入工具的具体名称和版本是什么?是否可以提供导入时使用的完整命令或配置文件?
  4. 是否尝试过手动查询 schema mhsb_test_1 下的表?如果有,请提供查询结果。
  5. 是否有对 OceanBase 集群进行过任何最近的变更操作(如升级、扩容或修改参数)?如果有,请详细描述变更内容。

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

从报错来看,是往目标端导入数据时,mhsb_test_1是空的,导入数据前需要先创建对应表结构

1 个赞

./obdumper -h -P -uroot -p’ -Dmhsb_test --sql --all -f /disk_d//back这个命令导出是导出表结构与数据,但sql文件中只存在数据,无表结构,导数工具不能做全表导出吗

导入时速度是比较慢,每张表都存了百万或千万条数据

根据文档库中的信息,obdumper 工具确实支持导出表结构和数据,但需要正确配置相关参数以确保表结构也被导出。以下是针对您问题的详细解答:

1. 确认 obdumper 的功能

根据文档(参考:什么是 obdumper),obdumper 支持以下特性:

  • 导出数据库对象定义(即表结构)。
  • 导出表数据。
  • 支持多种文件格式(如 SQL、CSV 等)。

因此,obdumper 是可以同时导出表结构和数据的。


2. 分析命令问题

您提供的命令如下:

./obdumper -h -P -uroot -p' -Dmhsb_test --sql --all -f /disk_d//back

这里可能存在以下问题:

  • 参数 -h-P 缺少具体的值(例如主机地址和端口号)。
  • 参数 -p 后面缺少密码值(目前仅有一个单引号 ')。
  • 参数 -f 指定的路径 /disk_d//back 可能不完整或无效。

此外,--sql 参数仅表示导出为 SQL 文件格式,但并未明确指定是否包含表结构。


3. 正确的全量导出命令

如果您希望同时导出表结构和数据,可以参考以下命令:

./obdumper \
  --host <主机地址> \
  --port <端口号> \
  --user root@<租户名> \
  --password <密码> \
  --database <数据库名> \
  --sql \
  --all \
  --file-path /disk_d/back

其中:

  • --sql 表示导出为 SQL 文件格式。
  • --all 表示导出所有表的数据和结构。
  • --file-path 指定导出文件的存储路径。

4. 验证导出结果

执行上述命令后,请检查导出目录下的文件内容:

  • 表结构:通常会生成一个包含 DDL(如 CREATE TABLE)的 SQL 文件。
  • 表数据:通常会生成多个包含插入语句(如 INSERT INTO)的 SQL 文件。

如果仍然未包含表结构,请尝试以下步骤:

  • 确保目标数据库中存在表结构。
  • 使用 --sys-user--sys-password 参数连接到 sys 租户,以获取完整的元数据信息(参考:表结构迁移说明)。

5. 总结

根据文档信息,obdumper 是支持全量导出(包括表结构和数据)的。如果您的导出结果中仅包含数据而无表结构,可能是由于命令参数配置不当或目标数据库中不存在表结构。

建议按照上述命令重新执行导出操作,并检查导出结果是否符合预期。如果问题仍未解决,请提供更多上下文信息(如完整的命令输出日志和目标数据库的状态)。

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

  1. 使用导数工具进行数据迁移
  2. 导出数据
  3. obloader/obdumper
  4. 使用 OceanBase 导数工具从 OceanBase 集群 Oracle 租户迁移数据到 MySQL 租户
  5. 使用 SQL 命令进行数据迁移

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

ddl和数据需要分两步导出,导出完成后再导入:
导入导出ddl使用 --ddl --all
导入导出数据使用 --csv --table ‘*’

文档这里写的不是很清晰,我反馈下

https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000002401638

先创建结构再导入

报错显示java环境变量问题

我试了一下, -f output --all --sql --ddl 是可以同时导出 ddl 和 data 的