tidb jdbc catalog报错

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】问题详细描述
【背景】创建tidb jdbc catalog:
CREATE EXTERNAL CATALOG tidb_catalog
PROPERTIES
(
“type”=“jdbc”,
“user”=“",
“password”="h
",
“jdbc_uri”="jdbc:mysql://10.
..:63306?allowPublicKeyRetrieval=true&useMysqlMetadata=true”,
“driver_url”=“file:///opt/starrocks/fe/lib/mysql-connector-j-8.0.33.jar”,
“driver_class”=“com.mysql.cj.jdbc.Driver”
);
创建的时候,fe.log日志报错:


已经在docker容器里使用mysql客户端可以正常连接,

【业务影响】否
【是否存算分离】是
【StarRocks版本】fe-ubuntu:4.0-latest
【集群规模】1fe+1be
【机器信息】单台机器16C/64G,通过docker-compose部署
【联系方式】78347793@qq.com
【附件】

  • fe.log/beINFO/相应截图
  • 慢查询:
    • Profile信息
    • 并行度:show variables like ‘%parallel_fragment_exec_instance_num%’;
    • pipeline是否开启:show variables like ‘%pipeline%’;
    • be节点cpu和内存使用率截图
  • 查询报错:
  • be crash
    • be.out
  • 外表查询报错
    • be.out和fe.warn.log

直接报错是网络连接问题

1、尝试添加超时参数socketTimeout=30000&connectTimeout=30000

2、获取container真实IP

docker inspect tidb-server | grep IPAddress

进入starrocks容器通过telnet tidb-server-ip 63306检查网络连通性

3、发一下compose脚本看一下配置

1、增加socketTimeout=30000&connectTimeout=30000,还是报错,catalog语句见截图

2、tidb-server是独立部署的数据库服务器,不是在容器内的,但已经确认在fe里,通过mysql 客户端可以连接,见截图

3、见截图


er thread 126952. remote=/10.105.12.53:57235, connectionId=16803677
2026-04-21 13:39:34.920+08:00 INFO (starrocks-mysql-nio-pool-82|126952) [ConnectScheduler.unregisterConnection():235] Connection closed. remote=10.105.12.53:57235, connectionId=16803677, qualifiedUser=root, user.currConn=7
2026-04-21 13:39:37.518+08:00 WARN (starrocks-mysql-nio-pool-80|125058) [ProxyConnection.checkException():182] HikariPool-3 - Connection org.mariadb.jdbc.Connection@754351ee marked as broken because of SQLSTATE(08000), ErrorCode(-1)
java.sql.SQLNonTransientConnectionException: (conn=-1711879502) Socket error
at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:300) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:366) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.client.impl.StandardClient.readPacket(StandardClient.java:936) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.client.impl.StandardClient.readResults(StandardClient.java:852) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.client.impl.StandardClient.readResponse(StandardClient.java:771) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.client.impl.StandardClient.execute(StandardClient.java:695) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.Statement.executeInternal(Statement.java:1035) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.Statement.executeQuery(Statement.java:166) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.DatabaseMetaData.executeQuery(DatabaseMetaData.java:560) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.DatabaseMetaData.getTables(DatabaseMetaData.java:771) ~[mariadb-java-client-3.3.2.jar:?]
at com.zaxxer.hikari.pool.ProxyDatabaseMetaData.getTables(ProxyDatabaseMetaData.java:69) ~[HikariCP-3.4.5.jar:?]
at com.zaxxer.hikari.pool.HikariProxyDatabaseMetaData.getTables(HikariProxyDatabaseMetaData.java) ~[HikariCP-3.4.5.jar:?]
at com.starrocks.connector.jdbc.MysqlSchemaResolver.checkAndSetSupportPartitionInformation(MysqlSchemaResolver.java:93) ~[starrocks-fe.jar:?]
at com.starrocks.connector.jdbc.JDBCMetadata.checkAndSetSupportPartitionInformation(JDBCMetadata.java:136) ~[starrocks-fe.jar:?]
at com.starrocks.connector.jdbc.JDBCMetadata.(JDBCMetadata.java:104) ~[starrocks-fe.jar:?]
at com.starrocks.connector.jdbc.JDBCMetadata.(JDBCMetadata.java:71) ~[starrocks-fe.jar:?]
at com.starrocks.connector.jdbc.JDBCConnector.(JDBCConnector.java:60) ~[starrocks-fe.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:481) ~[?:?]
at com.starrocks.connector.ConnectorFactory.createRealConnector(ConnectorFactory.java:66) ~[starrocks-fe.jar:?]
at com.starrocks.connector.LazyConnector.initIfNeeded(LazyConnector.java:68) ~[starrocks-fe.jar:?]
at com.starrocks.connector.ConnectorFactory.createConnector(ConnectorFactory.java:46) ~[starrocks-fe.jar:?]
at com.starrocks.connector.ConnectorMgr.createConnector(ConnectorMgr.java:42) ~[starrocks-fe.jar:?]
at com.starrocks.server.CatalogMgr.createCatalog(CatalogMgr.java:116) ~[starrocks-fe.jar:?]
at com.starrocks.server.CatalogMgr.createCatalog(CatalogMgr.java:92) ~[starrocks-fe.jar:?]
at com.starrocks.qe.DDLStmtExecutor$StmtExecutorVisitor.lambda$visitCreateCatalogStatement$79(DDLStmtExecutor.java:1072) ~[starrocks-fe.jar:?]
at com.starrocks.common.ErrorReport.wrapWithRuntimeException(ErrorReport.java:128) ~[starrocks-fe.jar:?]
at com.starrocks.qe.DDLStmtExecutor$StmtExecutorVisitor.visitCreateCatalogStatement(DDLStmtExecutor.java:1062) ~[starrocks-fe.jar:?]
at com.starrocks.qe.DDLStmtExecutor$StmtExecutorVisitor.visitCreateCatalogStatement(DDLStmtExecutor.java:212) ~[starrocks-fe.jar:?]
at com.starrocks.sql.ast.CreateCatalogStmt.accept(CreateCatalogStmt.java:73) ~[starrocks-fe.jar:?]
at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:107) ~[starrocks-fe.jar:?]
at com.starrocks.qe.DDLStmtExecutor.execute(DDLStmtExecutor.java:197) ~[starrocks-fe.jar:?]
at com.starrocks.qe.StmtExecutor.handleDdlStmt(StmtExecutor.java:2428) ~[starrocks-fe.jar:?]
at com.starrocks.qe.StmtExecutor.execute(StmtExecutor.java:958) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.executeQueryAttempt(ConnectProcessor.java:535) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.runWithParserStageRetry(ConnectProcessor.java:432) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:369) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.dispatch(ConnectProcessor.java:746) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.processOnce(ConnectProcessor.java:1123) ~[starrocks-fe.jar:?]
at com.starrocks.mysql.nio.MySQLReadListener.handleRequest(MySQLReadListener.java:152) ~[starrocks-fe.jar:?]
at com.starrocks.mysql.nio.MySQLReadListener.lambda$handleEvent$0(MySQLReadListener.java:92) ~[starrocks-fe.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:840) ~[?:?]
Caused by: java.net.SocketTimeoutException: Read timed out
at sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:288) ~[?:?]
at sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:314) ~[?:?]
at sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:355) ~[?:?]
at sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:808) ~[?:?]
at java.net.Socket$SocketInputStream.read(Socket.java:966) ~[?:?]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:244) ~[?:?]
at java.io.BufferedInputStream.read1(BufferedInputStream.java:284) ~[?:?]
at java.io.BufferedInputStream.read(BufferedInputStream.java:343) ~[?:?]
at org.mariadb.jdbc.client.socket.impl.PacketReader.readReusablePacket(PacketReader.java:62) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.message.ClientMessage.readPacket(ClientMessage.java:153) ~[mariadb-java-client-3.3.2.jar:?]
at org.mariadb.jdbc.client.impl.StandardClient.readPacket(StandardClient.java:913) ~[mariadb-java-client-3.3.2.jar:?]
… 44 more
2026-04-21 13:39:37.519+08:00 ERROR (starrocks-mysql-nio-pool-80|125058) [JDBCConnector.():63] Failed to create jdbc metadata on [catalog : tidb_catalog]
com.starrocks.connector.exception.StarRocksConnectorException: (conn=-1711879502) Socket error
at com.starrocks.connector.jdbc.MysqlSchemaResolver.checkAndSetSupportPartitionInformation(MysqlSchemaResolver.java:104) ~[starrocks-fe.jar:?]
at com.starrocks.connector.jdbc.JDBCMetadata.checkAndSetSupportPartitionInformation(JDBCMetadata.java:136) ~[starrocks-fe.jar:?]
at com.starrocks.connector.jdbc.JDBCMetadata.(JDBCMetadata.java:104) ~[starrocks-fe.jar:?]
at com.starrocks.connector.jdbc.JDBCMetadata.(JDBCMetadata.java:71) ~[starrocks-fe.jar:?]
at com.starrocks.connector.jdbc.JDBCConnector.(JDBCConnector.java:60) ~[starrocks-fe.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:481) ~[?:?]
at com.starrocks.connector.ConnectorFactory.createRealConnector(ConnectorFactory.java:66) ~[starrocks-fe.jar:?]
at com.starrocks.connector.LazyConnector.initIfNeeded(LazyConnector.java:68) ~[starrocks-fe.jar:?]
at com.starrocks.connector.ConnectorFactory.createConnector(ConnectorFactory.java:46) ~[starrocks-fe.jar:?]
at com.starrocks.connector.ConnectorMgr.createConnector(ConnectorMgr.java:42) ~[starrocks-fe.jar:?]
at com.starrocks.server.CatalogMgr.createCatalog(CatalogMgr.java:116) ~[starrocks-fe.jar:?]
at com.starrocks.server.CatalogMgr.createCatalog(CatalogMgr.java:92) ~[starrocks-fe.jar:?]
at com.starrocks.qe.DDLStmtExecutor$StmtExecutorVisitor.lambda$visitCreateCatalogStatement$79(DDLStmtExecutor.java:1072) ~[starrocks-fe.jar:?]
at com.starrocks.common.ErrorReport.wrapWithRuntimeException(ErrorReport.java:128) ~[starrocks-fe.jar:?]
at com.starrocks.qe.DDLStmtExecutor$StmtExecutorVisitor.visitCreateCatalogStatement(DDLStmtExecutor.java:1062) ~[starrocks-fe.jar:?]
at com.starrocks.qe.DDLStmtExecutor$StmtExecutorVisitor.visitCreateCatalogStatement(DDLStmtExecutor.java:212) ~[starrocks-fe.jar:?]
at com.starrocks.sql.ast.CreateCatalogStmt.accept(CreateCatalogStmt.java:73) ~[starrocks-fe.jar:?]
at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:107) ~[starrocks-fe.jar:?]
at com.starrocks.qe.DDLStmtExecutor.execute(DDLStmtExecutor.java:197) ~[starrocks-fe.jar:?]
at com.starrocks.qe.StmtExecutor.handleDdlStmt(StmtExecutor.java:2428) ~[starrocks-fe.jar:?]
at com.starrocks.qe.StmtExecutor.execute(StmtExecutor.java:958) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.executeQueryAttempt(ConnectProcessor.java:535) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.runWithParserStageRetry(ConnectProcessor.java:432) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:369) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.dispatch(ConnectProcessor.java:746) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.processOnce(ConnectProcessor.java:1123) ~[starrocks-fe.jar:?]
at com.starrocks.mysql.nio.MySQLReadListener.handleRequest(MySQLReadListener.java:152) ~[starrocks-fe.jar:?]
at com.starrocks.mysql.nio.MySQLReadListener.lambda$handleEvent$0(MySQLReadListener.java:92) ~[starrocks-fe.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:840) ~[?:?]

tidb那边的 information_schema 下的系统表数量比较多,这块创建catalog会遍历其中的所有表,然后找到partitions表,比较耗时,connectTimeout=60000&socketTimeout=60000改成这个再试试

tidb下的表和分区表确实很多,有什么方法能规避这个问题么,按需扫描tidb的infomation_schema信息

可以先试试增加超时时间看最终能不能成功,如果可以的话,这边可能需要提研发看看能不能优化一下这块

connectTimeout=600000&socketTimeout=600000,设置成这样了,10分钟,还是不行,而且从客户端的执行耗时来看,仍然是30秒,感觉jdbc的配置没有生效呢?

ADMIN SET FRONTEND CONFIG (“jdbc_network_timeout_ms” = “60000”);
ADMIN SET FRONTEND CONFIG (“jdbc_query_timeout_ms” = “60000”);
改一下这两个试试

可以了,谢谢,但还是建议不全量扫描infomation下的信息,因为外部数据仓库一般都很大,特别容易超时

了解,这边跟研发也沟通一下