obdumper出现show grants for test@10.%.%.%报错

【 使用环境 】测试环境
【 OB or 其他组件 】obdumper
【 使用版本 】Version: 4.3.4-RELEASE
【问题描述】使用obdumper执行导出表结构ddl时出现show grants for test@10.%.%.%报错
【复现路径】执行命令./obdumper -h 192.168.1.10 -P 2883 -u admin -p xxxxxx -c ob01 -t tcmysql -D test --ddl --all -f /home/admin/test/ddl
【附件及日志】报错日志如下
2025-08-18 13:55:52 [INFO] Query 0 dependencies elapsed 15.68 ms
2025-08-18 13:55:52 [ERROR] SQL: show grants for test@10.%.%.%; java.sql.SQLSyntaxErrorException: (conn=815006252) You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near ‘%.%.%;’ at line 1
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:110) ~[oceanbase-client-2.4.14.jar:?]
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:202) ~[oceanbase-client-2.4.14.jar:?]
at com.oceanbase.jdbc.JDBC4ServerPreparedStatement.prepare(JDBC4ServerPreparedStatement.java:312) ~[oceanbase-client-2.4.14.jar:?]
at com.oceanbase.jdbc.JDBC4ServerPreparedStatement.(JDBC4ServerPreparedStatement.java:164) ~[oceanbase-client-2.4.14.jar:?]
at com.oceanbase.jdbc.ServerSidePreparedStatement.(ServerSidePreparedStatement.java:78) ~[oceanbase-client-2.4.14.jar:?]
at com.oceanbase.jdbc.OceanBaseConnection.internalPrepareStatement(OceanBaseConnection.java:813) ~[oceanbase-client-2.4.14.jar:?]
at com.oceanbase.jdbc.OceanBaseConnection.prepareStatement(OceanBaseConnection.java:575) ~[oceanbase-client-2.4.14.jar:?]
at com.alibaba.druid.pool.DruidStatementConnection.prepareStatement(DruidStatementConnection.java:171) ~[druid-1.2.22.jar:?]
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:592) ~[druid-1.2.22.jar:?]
at com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:921) ~[druid-1.2.22.jar:?]
at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:137) ~[druid-1.2.22.jar:?]
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:587) ~[druid-1.2.22.jar:?]
at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:361) ~[druid-1.2.22.jar:?]
at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:407) ~[druid-1.2.22.jar:?]
at com.oceanbase.tools.loaddump.jdbc.JdbcExecutor.query(JdbcExecutor.java:47) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at com.oceanbase.tools.loaddump.jdbc.JdbcTemplate.query(JdbcTemplate.java:58) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at com.oceanbase.tools.loaddump.jdbc.JdbcTemplate.query(JdbcTemplate.java:66) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at com.oceanbase.tools.loaddump.schema.accessor.ObMySqlMetadataAccessor.queryObjUserMapping(ObMySqlMetadataAccessor.java:1651) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at com.oceanbase.tools.loaddump.schema.accessor.ObMySqlMetadataAccessor.queryMetadata(ObMySqlMetadataAccessor.java:176) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at com.oceanbase.tools.loaddump.schema.accessor.ObMySqlMetadataAccessor.queryMetadata(ObMySqlMetadataAccessor.java:111) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at com.oceanbase.tools.loaddump.dumper.task.schema.ObMysqlSchemaDumpTask.dumpSchema(ObMysqlSchemaDumpTask.java:45) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at com.oceanbase.tools.loaddump.dumper.task.schema.ObMysqlCompactSchemaDumpTask.dumpSchema(ObMysqlCompactSchemaDumpTask.java:49) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at com.oceanbase.tools.loaddump.dumper.task.schema.AbstractSchemaDumpTask.dumpCreateObjects(AbstractSchemaDumpTask.java:150) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at com.oceanbase.tools.loaddump.dumper.task.schema.AbstractSchemaDumpTask.run(AbstractSchemaDumpTask.java:110) ~[ob-loader-dumper-4.3.4-RELEASE.jar:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_202]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_202]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_202]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_202]
at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_202]
Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near ‘%.%.%;’ at line 1
at com.oceanbase.jdbc.internal.com.send.ComStmtPrepare.buildErrorException(ComStmtPrepare.java:182) ~[oceanbase-client-2.4.14.jar:?]
at com.oceanbase.jdbc.internal.com.send.ComStmtPrepare.read(ComStmtPrepare.java:99) ~[oceanbase-client-2.4.14.jar:?]
at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.prepare(AbstractQueryProtocol.java:281) ~[oceanbase-client-2.4.14.jar:?]
at com.oceanbase.jdbc.JDBC4ServerPreparedStatement.prepare(JDBC4ServerPreparedStatement.java:296) ~[oceanbase-client-2.4.14.jar:?]
… 26 more

2025-08-18 13:55:53 [ERROR] Error: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near ‘%.%.%;’ at line 1
2025-08-18 13:55:53 [INFO]

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

1 个赞

对于您提到的问题,“使用 obdumper 导出表结构 DDL 时,执行 show grants for test@10.%.%.% 报错,错误代码为 4013”,看起来像是权限相关的问题。虽然 obdiag 主要用于日志采集和根因分析,但对于这个问题,我们可能更关注于具体的错误信息和数据库配置。

建议您可以先尝试以下步骤:

  1. 检查用户权限:确认 test@10.%.%.% 用户是否具有足够的权限来执行 SHOW GRANTS 操作。可以使用以下命令查看用户的权限:

    SHOW GRANTS FOR 'test'@'10.%.%.%';
    
  2. 检查错误日志:查看 OceanBase 的错误日志,以获取更多关于错误 4013 的详细信息。这可以通过 obdiag 工具来实现:

    obdiag gather scene run --scene=observer.sql_err --env "{db_connect='-h127.0.0.1 -P2881 -utest@test -p****** -Dtest', trace_id='Yxx'}"
    

    请将 -h127.0.0.1 -P2881 -utest@test -p****** -Dtest 替换为您的实际数据库连接信息,并将 trace_id 替换为实际的跟踪 ID。

  3. 查看会话信息:有时会话信息中会有更多线索。可以使用以下 SQL 查询当前会话信息:

    SELECT * FROM oceanbase.__all_session WHERE user_name = 'test';
    

为了更好地帮助您解决问题,请提供以下信息:

  1. 具体的错误信息和完整的错误日志。
  2. test@10.%.%.% 用户的权限列表。
  3. 您执行 SHOW GRANTS 操作的完整 SQL 语句及其上下文。
  4. 您的 OceanBase 版本信息。

希望这些信息能帮助您解决问题,如果您有任何进一步的问题或需要更多的帮助,请随时告知。

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

1 个赞

猜测是obdumper工具的bug,应该执行show grants for test@‘10.%.%.%’,而不是show grants for test@10.%.%.%,缺少了引号而出现了报错

1 个赞

obdumper有啥参数或选项支持不执行这个show grants语句吗

1 个赞

test用户的权限够么

1 个赞

是使用admin用户(权限很大GRANT ALTER, CREATE, CREATE USER, DELETE, DROP, INSERT, UPDATE, SELECT, INDEX, CREATE VIEW, SHOW VIEW, SHOW DATABASES, PROCESS, REFERENCES, REPLICATION SLAVE, REPLICATION CLIENT, EXECUTE, ALTER ROUTINE, CREATE ROUTINE, RELOAD, LOCK TABLES, TRIGGER, EVENT ON . TO ‘admin’@’%’)执行导出命令的,test@‘10.%.%.%’(GRANT SELECT ON test.* TO ‘test’@‘10.%.%.%’)只是test库里面的一个用户普通用户

由于test库里面只有表没有其他对象,最后使用如下命令正常导出了
./obdumper -h 192.168.1.10 -P 2883 -u admin -p xxxxxx -c ob01 -t tcmysql -D test --ddl –table ‘*’ -f /home/admin/test/ddl

而最开始的命令./obdumper -h 192.168.1.10 -P 2883 -u admin -p xxxxxx -c ob01 -t tcmysql -D test --ddl –all -f /home/admin/test/ddl 里面的all选项估计检查的内容比较多,比如要查看test库里面非导出用户test@'10.%.%.%'的权限

这边去确认了一下,这种ip+%通配有已知问题,要下个版本修复

2 个赞