ob驱动连接报错

【 使用环境 】 测试环境
【 OB or 其他组件 】驱动
【 使用版本 】2.4.15
【问题描述】连接报错 unexpected end of stream, read 0 bytes from 4
【复现路径】用mysql驱动可以正常连接,端口是通的,无问题,换成ob驱动就报错
【附件及日志】2025-11-03 09:29:10.610 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.46]
2025-11-03 09:29:10.780 [main] INFO o.a.c.c.ContainerBase.[Tomcat].[localhost].[/bonc]:173 - Initializing Spring embedded WebApplicationContext
2025-11-03 09:29:10.781 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext:285 - Root WebApplicationContext: initialization completed in 4309 ms
2025-11-03 09:29:11.699 [main] ERROR com.alibaba.druid.pool.DruidDataSource:931 - init datasource error, url: jdbc:oceanbase://10.125.20.33:2883,10.125.20.34:2883,10.125.20.35:2883/dss?socketTimeout=60000000&connectTimeout=60000&autoReconnect=true&rewriteBatchedStatements=true&allowMultiQueries=true&useServerPrepStmts=false
java.sql.SQLNonTransientConnectionException: Could not connect to 10.125.20.33:2883,10.125.20.34:2883,10.125.20.35:2883 : Could not connect to 10.125.20.35:2883 : unexpected end of stream, read 0 bytes from 4
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:122)
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:235)
at com.oceanbase.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1720)
at com.oceanbase.jdbc.internal.util.Utils.retrieveProxy(Utils.java:1431)
at com.oceanbase.jdbc.OceanBaseConnection.newConnection(OceanBaseConnection.java:311)
at com.oceanbase.jdbc.Driver.connect(Driver.java:89)
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156)
at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787)
at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:38)
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150)
at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:251)
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723)
at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:927)
at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.doCreateDataSource(DruidDataSourceCreator.java:83)
at com.baomidou.dynamic.datasource.creator.AbstractDataSourceCreator.createDataSource(AbstractDataSourceCreator.java:70)
at com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator.createDataSource(DefaultDataSourceCreator.java:48)
at com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider.createDataSourceMap(AbstractDataSourceProvider.java:47)
at com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider.loadDataSources(YmlDynamicDataSourceProvider.java:42)
at com.baomidou.dynamic.datasource.DynamicRoutingDataSource.afterPropertiesSet(DynamicRoutingDataSource.java:219)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1858)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1795)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.getIfUnique(DefaultListableBeanFactory.java:1969)
at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker.getDataSourceInitializer(DataSourceInitializerInvoker.java:98)
at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker.afterPropertiesSet(DataSourceInitializerInvoker.java:61)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1858)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1795)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.cloud.autoconfigure.RefreshAutoConfiguration$JpaInvokerConfiguration.init(RefreshAutoConfiguration.java:120)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:415)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1791)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1109)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:755)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:402)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1247)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1236)
at com.bonc.BoncApplication.main(BoncApplication.java:26)
Caused by: java.sql.SQLNonTransientConnectionException: Could not connect to 10.125.20.35:2883 : unexpected end of stream, read 0 bytes from 4
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:122)
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:225)
at com.oceanbase.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:618)
at com.oceanbase.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1715)
… 66 common frames omitted
Caused by: java.io.EOFException: unexpected end of stream, read 0 bytes from 4
at com.oceanbase.jdbc.internal.io.input.StandardPacketInputStream.readMysqlStream(StandardPacketInputStream.java:164)
at com.oceanbase.jdbc.internal.io.input.StandardPacketInputStream.getPacketArray(StandardPacketInputStream.java:113)
at com.oceanbase.jdbc.internal.io.input.StandardPacketInputStream.getPacket(StandardPacketInputStream.java:100)
at com.oceanbase.jdbc.internal.protocol.AbstractConnectProtocol.authenticationHandler(AbstractConnectProtocol.java:733)
at com.oceanbase.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:602)
… 67 common frames omitted

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

连接串配置
datasource:

druid:

stat-view-servlet:

enabled: false

loginUsername:

loginPassword:

allow:

web-stat-filter:

enabled: false

dynamic:

druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)

连接池的配置信息

初始化大小,最小,最大

initial-size: 5

min-idle: 5

maxActive: 1000

配置获取连接等待超时的时间

maxWait: 60000

配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

timeBetweenEvictionRunsMillis: 60000

配置一个连接在池中最小生存的时间,单位是毫秒

minEvictableIdleTimeMillis: 300000

validationQuery: SELECT 1

testWhileIdle: true

testOnBorrow: false

testOnReturn: false

打开PSCache,并且指定每个连接上PSCache的大小

poolPreparedStatements: true

maxPoolPreparedStatementPerConnectionSize: 20

配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall’用于防火墙

filters: stat,slf4j

通过connectProperties属性来打开mergeSql功能;慢SQL记录

connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

datasource:

master:

url: jdbc:oceanbase:loadbalance://10.125.20.33:2883,10.125.20.34:2883,10.125.20.35:2883/dss?socketTimeout=60000000&connectTimeout=60000&autoReconnect=true&rewriteBatchedStatements=true&allowMultiQueries=true&useServerPrepStmts=false

driver-class-name: com.oceanbase.jdbc.Driver

username:

password:

1 个赞

根据您的描述,使用OceanBase驱动连接数据库时遇到了错误 “unexpected end of stream, read 0 bytes from 4”,这可能与网络稳定性、OceanBase服务状态或驱动版本兼容性有关。为了进一步定位问题,我建议使用obdiag工具进行日志采集。

日志采集场景: 网络问题
日志采集命令: obdiag gather scene run --scene=observer.io

请先运行上述命令,将采集到的日志文件打包并提供给我们,以便我们能够更准确地诊断问题。同时,为了更好地理解问题背景,请您回答以下问题:

  1. 您当前使用的OceanBase驱动版本是什么?
  2. 是否在同一台机器上使用了不同的网络配置尝试过连接?
  3. 出现该问题的时间段是否有过网络波动或维护操作?
  4. 测试环境中是否有其他应用同样使用OceanBase驱动连接数据库,并且也遇到了类似问题?
  5. 能否提供出现错误时的完整堆栈跟踪信息?

这些问题的答案将有助于我们更准确地判断问题的原因。感谢您的配合。

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

1 个赞

涉及驱动包版本

com.baomidou

dynamic-datasource-spring-boot-starter

3.5.0

com.baomidou

mybatis-plus-boot-starter

3.5.3

com.alibaba

druid-spring-boot-starter

1.2.8

1 个赞

这个报错ObProxy直接断开连接了。麻烦提纲已发obproxy的error日志和obproxy_diagnosis.log看下

1 个赞

学习

35obproxylog.rar (23.3 MB)
麻烦老师帮忙看一下 谢谢啦

1 个赞

这里看昨天9.15-9.30时候存在8205报错,ObProxy白名单校验失败问题。是这期间测试的么

1 个赞


社区驱动为2.2.10,你的2.4.15版本是企业版的么

是企业版的

是这个时间段测试的

你好,你提的这个技术问题牵涉到OceanBase企业版范围内的功能细节。建议你通过以下方式寻求帮助:
1.如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;
2.如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。
OceanBase官网商务咨询

https://www.oceanbase.com/contactus?fromPage=https%3A%2F%2Fwww.oceanbase.com%2Fsoftwarecenter-enterprise&dataSources=softwarecenter-enterprise_footercontact_d2022

1 个赞

问过工单了 说ob是社区 需要社区提问

用是jdbc驱动

除了驱动 proxy+ob都是社区版的么?建议你用统一的社区版或企业版产品
或mysql租户建议使用mysql驱动即可

1 个赞

好的 谢谢老师