The last packet sent successfully to the server was 0 milliseconds ago. 解决办法记录_apachesolr的博客-程序员秘密

技术标签: java  mysql  bug系列  

最近与第三方对接数据的时候,通过navicat等工具的时候是能够正常访问数据库的,但通过java代码访问对方提供的数据库,总是错误,通过各种尝试,总算解决了,特记录一下,希望能帮助同样遇到此问题的同行
(1)第一次通过代码访问时出现了以下错误:

    Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2332)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:243)
    at javaapplication3.JavaApplication3.main(JavaApplication3.java:32)

解决办法:

大部分网上给的解决方案都是修改连接接超时的参数,但是我按照网上的方法都试了依然不行
在这里插入图片描述

同样的一套代码使用我本地的数据库进行测试的时候是正常的,但是现在外网的数据库出现这种问题,
最后没有办法,我对比了一下两个库的版本号,左边是我本地的,右边是第三方提供的外网数据库
在这里插入图片描述在这里插入图片描述
目前程序里使用的mysql的驱动jar包版本为
在这里插入图片描述

于是,我尝试着将mysql的驱动jar包版本提升一下,换成一下jar包
在这里插入图片描述

(2)换了jar包后出现了以下新的错误,第一个问题算是解决了,可是出现了新的问题

```java
Tue Feb 09 20:08:38 CST 2021 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
	at com.mysql.jdbc.Util.getInstance(Util.java:408)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
	at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2105)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2030)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:778)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at com.ccb.commons.util.MYSQLJDBCUtil.getConnection(MYSQLJDBCUtil.java:40)
	at com.ccb.commons.util.MYSQLJDBCUtil.main(MYSQLJDBCUtil.java:95)

解决办法:
我的链接地址配置是这样的
url = “jdbc:mysql://127.0.0.1:39603/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false”;在这里插入图片描述
于是将地址换成了一下
url = “jdbc:mysql://127.0.0.1:39603/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8”;

在这里插入图片描述
(3)第二个问题解决了,又出现了以下错误

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 619 milliseconds ago.  The last packet sent successfully to the server was 595 milliseconds ago.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
	at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:201)
	at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4914)
	at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1663)
	at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1224)
	at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2199)
	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2230)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2025)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:778)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at com.ccb.commons.util.MYSQLJDBCUtil.getConnection(MYSQLJDBCUtil.java:40)
	at com.ccb.commons.util.MYSQLJDBCUtil.main(MYSQLJDBCUtil.java:95)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
	at sun.security.ssl.Alerts.getSSLException(Unknown Source)
	at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
	at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
	at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
	at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
	at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
	at sun.security.ssl.Handshaker.processLoop(Unknown Source)
	at sun.security.ssl.Handshaker.process_record(Unknown Source)
	at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
	at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:186)
	... 19 more
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
	at com.mysql.jdbc.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:302)
	at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(Unknown Source)
	... 28 more
Caused by: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
	at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(Unknown Source)
	at java.security.cert.CertPathValidator.validate(Unknown Source)
	at com.mysql.jdbc.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:295)
	... 29 more

解决办法:
看提示ssl的问题,于是将url地址中的useSSL=true改成useSSL=false
最后终于成功了

总结解决方案
(1)首先确定jdbc.url地址是正确的
(2)修改wait_timeout和interactive_timeout ,参考链接https://blog.csdn.net/JustinQin/article/details/78630100
(3)修改mysql驱动版本,将版本提升,所以建议如果修改timeout不成功的话,一定要将驱动版本升级一下再试试

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/apachesolr/article/details/113766949

智能推荐

MemCache详解_Quiet_boy的博客-程序员秘密

MemCache是什么MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。

apiDoc 详解 api接口文档生成_Dom_留声机的博客-程序员秘密_apidoc

PHP使用apiDoc api接口文档安装apidocapidoc 命令参数列表配置(apidoc.json)apidoc.json配置项apidoc注释参数@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@apiHeaderExam...

android api 和版本对应表汇总_AaVictory.的博客-程序员秘密_android api版本对应

Android历代版本的命名:我们都是知道,安卓系统的历来的名称都是很有意思的,下面无限互联Android培训的老师归纳了一下:Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta),发条机器人(Android1.0)。后来由于涉及到版权问题,谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。甜点命名法开始于Android1.5发布的时候。作为每个版本代表的甜点的尺寸越变越大,然后按照26个字母数序:

【go-zero】go-zero开发环境 如何聚合所有api? caddy反向代理服务分发 微服务设计api聚合方法 best practice_CTRA王大大的博客-程序员秘密_gozero 多个api文件

【go-zero】best practicego-zero开发环境 如何聚合所有api? caddy反向代理服务分发 微服务设计api聚合方法

linux内核创建软链接过程,Linux内核2.4.18创建符号链接的系统调用sys_symlink分析_weixin_39647458的博客-程序员秘密

(1)调用路径:sys_symlink-&gt;vfs_symlink-&gt;ext2_symlink(2)代码asmlinkage long sys_symlink(const char * oldname, const char * newname){int error = 0;char * from;char * to;from = getname(oldname);//原文件名if(IS...

随便推点

优雅地处理运行时权限请求_rain9155的博客-程序员秘密

前言从android 6.0(API 级别 23)开始,android引入了运行时权限,用户开始在应用运行时向其授予权限,而不是在应用安装时向其授予权限,如果应用的某项功能需要使用到受运行时权限保护的资源(例如相机、位置、麦克风等),但在运行该功能前没有动态地申请相应的权限,那么在调用该功能时就会抛出SecurityException异常, android 6.0已经推出了很多年了,相信大家对于运行时权限的申请过程已经非常的熟悉,但是android的运行时权限的申请过程一直都是非常的繁琐的,主要有两步:

视频播放的心得体会(一)_JackLee18的博客-程序员秘密

  最近在做短视频播放的应用,为了实现比较好的交互体验,这边用到了缓存,预缓存处理。我这边用到的播放器是SJBaseVideoPlayer 这个库。首先要向这个开源库的作者表示感谢,感谢他贡献自己劳动成果。  在实际应用中,我主要对播放器划分了三个层,交互控制层,播放层,缓存处理层。交互控制层  交互控制层,主要就是根据产品的需求做出对应的交互效果,UI效果。这边会因为具体的业务需求而经常发...

运维思索:自动化运维体系如何入手_木讷大叔爱运维的博客-程序员秘密_自动化运维体系

需求运维是事件驱动,还是自驱动可能是我们在运维工作中不太关注的问题。事件驱动让运维止步于故障,而自驱动让运维不止于建设。持续性的运维建设就需要一套自动化的运维体系,那么我们应该从何入手?其实前期《运维思考》一系列文章已经给我们答案了,就是从运维框架入手分层建设、打好基础,记住“万丈高楼平地起,勿在浮沙筑高台”。运维框架通常讲到运维建设,我们脑海中首先浮现的是“一团麻”,因为这不是一个人、一个岗位的工作,而是一整个团队的工作;所以我们将“这团麻”进行由底层向上可划分为:IT基础设施层IT基础

Java 基础(2)----基本语法一_雅静8的博客-程序员秘密

Java学习 Java基础(2)—-基本语法一目录关键字标识符变量基本数据类型基本数据类型转换正文关键字 知识点总结:定义:关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等。关键字不能用作变量名、方法名、类名、包名和参数。java中包含50个关键,关

存储系统_小良bety的博客-程序员秘密_存储系统

3.1 存储系统的概述3.1.1 存储器是计算机五大组成部分之一,用于存储程序和数据。利用不同容量,成本,功耗和速度的多种存储器构成有机结合的多极存储系统。3.1.2 三级存储系统的组成组成:内存储器,外存储器,高速缓冲存储器(cache)由于CPU和内存储器的速度差异较大,造成CPU资源浪费,从而引入Cache减小速度差异。3.1.3 存储器的分类二进制代码位是存储器中最小的存储单位,称为存储位元,由若干个存储位元组成一个存储单元,由多个存储单元组成一个存储器。内存可以分为主存和c

推荐文章

热门文章

相关标签