Java:链接mysql数据库报错:CommunicationsException: Communications link failure
目录
- 简介
- 异常信息
- 排查
- 原因
- 解决
简介
1、Java程序链接mysql数据库报错
2、其他Java程序链接该数据库是正常的
异常信息
2025-05-30 18:04:17.131 - [32m[ERROR][0;39m - [Druid-ConnectionPool-Create-1346351097] - [1;34m[com.alibaba.druid.pool.DruidDataSource - line:2469][0;39m: create connection SQLException, url: jdbc:mysql://192.168.1.116:3306/xxxDataBase?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8, errorCode 0, state 08S01
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:149)at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:786)at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:143)at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:786)at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:143)at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218)at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:143)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1515)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1578)at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2466)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.at sun.reflect.GeneratedConstructorAccessor73.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:361)at com.mysql.cj.protocol.a.NativeAuthenticationProvider.negotiateSSLConnection(NativeAuthenticationProvider.java:777)at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:486)at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:202)at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1449)at com.mysql.cj.NativeSession.connect(NativeSession.java:165)at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)... 13 common frames omitted
Caused by: javax.net.ssl.SSLException: Received fatal alert: internal_errorat sun.security.ssl.Alert.createSSLException(Alert.java:133)at sun.security.ssl.Alert.createSSLException(Alert.java:117)at sun.security.ssl.TransportContext.fatal(TransportContext.java:314)at sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293)at sun.security.ssl.TransportContext.dispatch(TransportContext.java:187)at sun.security.ssl.SSLTransport.decode(SSLTransport.java:154)at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1198)at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1107)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:400)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:372)at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:315)at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:188)at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:99)at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:352)... 20 common frames omitted
排查
1、确认数据库账号密码是正确的
2、其他Java程序可以正常链接该数据库
3、从以下错误日志看,程序与数据库服务之间的通讯是正常的,不过数据库服务在接收到数据包请求之后并没有响应
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
4、查看数据库配置链接,发现存在SSL相关配置:useSSL=true
jdbc:mysql://192.168.1.116:3306/xxxDataBase?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
5、将useSSL=true改为useSSL=false,程序可以正常链接数据库
原因
具体原因未知,应该与SSL有关
解决
将数据库链接的useSSL=true改为useSSL=false