1.1 错误信息:
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 20,820,001 milliseconds ago. The last packet sent successfully to the server was 20,820,002 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
at sun.reflect.GeneratedConstructorAccessor29.newInstance(Unknown Source) ~[na:na]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.7.0_51]
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[na:1.7.0_51]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) ~[mysql-connector-java-5.1.29.jar:na]
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1129) ~[mysql-connector-java-5.1.29.jar:na]
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3988) ~[mysql-connector-java-5.1.29.jar:na]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2598) ~[mysql-connector-java-5.1.29.jar:na]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778) ~[mysql-connector-java-5.1.29.jar:na]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2828) ~[mysql-connector-java-5.1.29.jar:na]
at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:5372) ~[mysql-connector-java-5.1.29.jar:na]
at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:881) ~[c3p0-0.9.1.1.jar:0.9.1.1]
at org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.setAutoCommit(AttributeRestoringConnectionInvocationHandler.java:98) ~[quartz-2.2.1.jar:na]
1.2 解决方法
- 如果使用的是JDBC,在JDBC URL上添加?autoReconnect=true
,如:
jdbc:mysql://10.10.10.10:3306/mydb?autoReconnect=true
- 如果是在Spring中使用DBCP连接池,在定义datasource增加属性validationQuery
和testOnBorrow
,如:
<bean id="vrsRankDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${countNew.jdbc.url}" />
<property name="username" value="${countNew.jdbc.user}" />
<property name="password" value="${countNew.jdbc.pwd}" />
<property name="validationQuery" value="SELECT 1" />
<property name="testOnBorrow" value="true"/>
</bean>
- 如果是在Spring中使用c3p0连接池,则在定义datasource的时候,添加属性testConnectionOnCheckin
和testConnectionOnCheckout
,如:
<bean name="cacheCloudDB" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${cache.url}"/>
<property name="user" value="${cache.user}"/>
<property name="password" value="${cache.password}"/>
<property name="initialPoolSize" value="10"/>
<property name="maxPoolSize" value="${cache.maxPoolSize}"/>
<property name="testConnectionOnCheckin" value="false"/>
<property name="testConnectionOnCheckout" value="true"/>
<property name="preferredTestQuery" value="SELECT 1"/>
</bean>
参考
附录分析
When a c3p0-proxied Connection throws an SQLException, c3p0 examines the Exception and the Connection to make a judgement about whether the problem implies that the Connection should no longer be included in the pool. c3p0 tests the Connection, and if the test fails, the Connection will be excluded from the pool. What c3p0 is telling you here is that a Connection that previously signalled an error and then failed a Connection test is still in use, and has signalled another error. From c3p0's perspective, this is a non-issue, it just means c3p0 doesn't have to do any kind of checks or notifications, the Connection is already gone as far as the pool is concerned. But c3p0 wonders why you'd still be using such a Connection, and warns you about it. Usually, if a client continues to use a Connection that c3p0 has correctly identified as broken, all further uses will provoke such an exception, and the fix is to close the Connection and start over when an application's Connection turns out to be dead. But, by the error you're getting, it looks like your Connection is still live and okay -- it's clearly communicating with the database. So, the issue is, why did c3p0 deem the Connection dead if it is not? If you turn on DEBUG level logging (relevant loggers would be com.mchange.v2.c3p0.impl.NewPooledConnection, com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool, and com.mchange.v2.c3p0.impl.DefaultConnectionTester, unless you've defined your own ConnectionTester), you can trace the testing and invalidation of Connections, and try to understand why Connections that seem okay are testing as broken. That will give you better information about what's going on. That said, the only cost of this behavior is disconcerting warning messages and somewhat faster churn of Connections through the pool. c3p0 is erring on the side of caution -- it has reason to believe a Connection is bad, so it's been excluded from the pool. It'd be nice to know why apparently good Connections are failing Connection tests, but if it is an infrequent occurrence, it's very little to worry about. (If it's happening a lot, you should track it down.) 原文地址:http://sourceforge.net/p/c3p0/mailman/message/18310863/
相关推荐
Cause com.mysql.jdbc.exceptions.jdbc4.CommunicationsException The last packet successfully received from the server was 47,795,922 milliseconds ago. The last packet sent successfully to the server was...
在这个案例中,C3P0连接池中的某些连接由于长时间空闲而被MySQL服务器断开,但是C3P0连接池并不知道这些连接已经失效,当客户端再次请求这些连接时,就产生了`CommunicationsException`异常。 #### 解决方案 根据...
@[Android studio通过jdbc连接mysql基本步骤 以及 遇到的坑“The last packet sent successfully to the server was 0 milliseconds ago”哈哈] 小白第一次发博客哈哈,记录一下这三个晚上来我的悲惨经历以及我成功...
The last packet successfully received from the server was 56,201,339 milliseconds ago. The last packet sent successfully to the server was 56,201,339 milliseconds ago. is longer than the server ...
代码如下:Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0 很明显这是连接初始化阶段就丢失了连接的错误。 google半天大多是说的注释掉配置文件中 bind-address = ...
【MySQL与JDBC1】是关于使用MySQL数据库和Java JDBC(Java Database Connectivity)进行数据库操作的基础教程。在本文中,我们将深入探讨如何在MySQL中执行常见的数据库管理任务,包括创建和删除数据库、操作数据库...
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 84,371,623 milliseconds ago. The last packet sent successfully to the server was 78,...
融合多个面上光强信息的混合迭代相位恢复算法
远程连接MySQL所遇到的问题以及解决问题方法 在 Linux 系统中,使用 YUM 命令安装 MySQL 后,需要进行一系列的配置以便能够远程连接 MySQL 数据库。以下是解决不能进行远程连接 MySQL 数据库的问题的方法,这些方法...
在IT行业中,数据库操作是日常开发中的重要环节,而MySQL作为广泛应用的关系型数据库,其性能和稳定性至关重要。本文将深入探讨“com.mysql.jdbc.PacketTooBigException: Packet for query is too large (11087 > ...
【MySQL连接错误分析与解决】 在使用MySQL数据库时,可能会遇到“Authentication Failed”错误,这通常意味着客户端在尝试连接数据库时认证失败。错误信息显示“Reading from the stream has failed”,表明在数据...
3、Can’t connect to local MySQL server through socket ‘/Data/mydata/mysql.sock’ socket文件目录不对应导致的问题 4、今天要说的就是 没有打开only_full_group_by Cause:...
An ISP earns its money by charging each of the the ISPs that connect to the IXP a relatively small fee, which may depend on the amount of traffic sent to or received from the IXP. 15. Google's ...
使用Navicat远程服务器mysql数据库时报错误:2013-Lost connection to MYSQL server at ‘waitting for initial communication packet’,system error:0 操作流程一、检验Mysql数据库是否安装成功二、对Mysql的配置...
### MySQL 5.7 中 max_allowed_packet 参数的理解与调整 #### 一、max_allowed_packet 参数简介 在MySQL数据库中,`max_allowed_packet` 参数用于控制客户端与服务器之间单个数据包的最大大小。此参数对诸如大BLOB...
Packet Tracer DSL.Modem 连接实验 Packet Tracer DSL.Modem 连接实验是使用 Packet Tracer 软件模拟远程拨号通信,连接两台远程主机,使其能互相通信的实验。实验中使用了 DSL.Modem 和云图,连接网络,模拟远程...