1.问题现象:

com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was58129 seconds ago.The last packet sent successfully to the server was 58129 seconds ago, which 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.

解决办法:

(备注:mysql5以上的,设置autoReconnect=true 是无效的 只有4.x版本,起作用)

1. 即使在创建Mysql时url中加入了autoReconnect=true参数,一但这个连接两次访问数据库的时间超出了服务器端wait_timeout的时间限制,还是会CommunicationsException: The last packet successfully received from the server was xxx milliseconds ago.

2. 服务器端的参数可以用

show global variables like 'wait_timeout';

set global wait_timeout=10;

来进行设置,但是wait_timeout值不应该设的太高.

3. 较好的策略是对处于idle状态的connection定时发送一个sql,来刷新服务器上的时间戳.这可以使用c3p0r的连接

如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat.

mysql数据库有一个wait_timeout的配置,默认值为28800(即8小时).

在默认配置不改变的情况下,如果连续8小时内都没有访问数据库的操作,再次访问mysql数据库的时候,mysql数据库会拒绝访问。

解决方案:

第一种途径使用命令行在mysql提示符下>set  global wait_timeout=1814400

这种方式是一种临时方法,重启服务就会返回默认值了。

第二种途径修改my.ini配置文件

[mysqld]

wait_timeout=31536000

interactive_timeout=31536000

在mysqld下面添加以上两行,后面的数字是时间

首先服务中找到mysql,然后右键属性,在可执行文件的路径中,使劲向后拖动鼠标就可以看到my.ini的文件了

2,另外:关于Mysql链接参数的说明如下:

mysql JDBC Driver

常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysql.Driver

详情请参见网站:http://www.gjt.org/

或在本网站下载mysql JDBC Driver(mm.jar)

另一个是mysql官方提供的JDBC Driver,其JAVA类名为:com.mysql.jdbc.Driver

驱动下载网址:http://dev.mysql.com/downloads/,进入其中的MySQL Connector/J区域下载。

mysql JDBC URL格式如下:

jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]...

现只列举几个重要的参数,如下表所示:

参数名称

参数说明

缺省值

最低版本要求

user

数据库用户名(用于连接数据库)

所有版本

password

用户密码(用于连接数据库)

所有版本

useUnicode

是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true

false

1.1g

characterEncoding

当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk

false

1.1g

autoReconnect

当数据库连接异常中断时,是否自动重新连接?

false

1.1

autoReconnectForPools

是否使用针对数据库连接池的重连策略

false

3.1.3

failOverReadOnly

自动重连成功后,连接是否设置为只读?

true

3.0.12

maxReconnects

autoReconnect设置为true时,重试连接的次数

3

1.1

initialTimeout

autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒

2

1.1

connectTimeout

和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本

0

3.0.1

socketTimeout

socket操作(读写)超时,单位:毫秒。 0表示永不超时

0

3.0.1

对应中文环境,通常mysql连接URL可以设置为:

jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false

在使用数据库连接池的情况下,最好设置如下两个参数:

autoReconnect=true&failOverReadOnly=false

需要注意的是,在xml配置文件中,url中的&符号需要转义成&。比如在tomcat的server.xml中配置数据库连接池时,mysql jdbc url样例如下:

jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk

&autoReconnect=true&failOverReadOnly=false

场景出现的理论依据

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0/dbcp 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向c3p0/dbcp 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。

如果你只是个DBA,你会想着,为什么数据库连接自己断了,是不是哪里有配置,我得去看看,那么你得到的解决方案-可能就是这样的

#my.cnf

wait_timeout=31536000

interactive_timeout=31536000

加大wait_timeout的时间。

But 现实环境中需要你考虑的是:

你设置多久检查一次连接有效的时间 依据是什么?

默认加大/减小wait_timeout除了解决当前问题,会不会带来其他影响?

个人当前觉得此题 第一需考虑的是:

你业务当前高峰期mysql_connection是多少?保留多久connection在高峰期都不会撑爆你数据库连接池?

如果你知道这个池-那么是改mysql ?还是改c3p0?还是双管齐下都是有据可循且不会带来后遗症的-最佳解决方案

如我当前有环境,一个现网的后台管理系统,使用人数在50以内,那么我wait_timeout 就是默认8小时,c3p0不用做连接有效性检查等,都是万事ok的。

而我还有一个EPG前台管理系统,用户量在300万以内,如果我wait_timeout为8小时,那我一到高峰期肯定就是死翘翘的,会有太多的TCP连接没关闭,

数据库连接数肯定是不够的。

因EPG的一个访问-一次对数据库操作量不大,查询完数据就完成ok啦,wait_timeout 设置在120s内应该是够用啦,那么相对应的c3p0中 设置小于wait_timeout 的时间有效性检查 -就能确保获取到连接是有效的。

请根据业务场景,来配置参数,不要解决了A问题,带来了B问题。

springboot 配置

#下面为连接池的补充设置,应用到上面所有数据源中

# 初始化大小,最小,最大

spring.datasource.initialSize=5

spring.datasource.minIdle=5

spring.datasource.maxActive=20

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

spring.datasource.maxWait=60000

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

spring.datasource.timeBetweenEvictionRunsMillis=60000

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

spring.datasource.minEvictableIdleTimeMillis=300000

mysql连接timeout_mysql 连接超时wait_timeout问题解决相关推荐

  1. 关于MAC下pymysql连接mysql数据库报错2003的问题解决方法

    关于MAC下pymysql连接mysql数据库报错2003的问题解决方法 问题:pymysql.err.OperationalError: (2003, "Can't connect to ...

  2. EF6 使用 和 连接MySql 数据库-闪退和若干问题解决

    在visual studio中用EF6连接Mysql数据库,搞了我两天,刚刚搞定,其实很简单就是版本的问题,这里填个坑. 首先,必备插件 1. MySql Connector/NET 2. MySql ...

  3. MySQL+Hibernate下连接空闲8小时自动断开问题解决方案

    本文转自http://blog.sina.com.cn/s/blog_6e6bbaf20100uocd.html,所有权利归原作者所有. 前段时间刚完成一个项目,数据库为MySQL5.0,持久层使用H ...

  4. 查询的时候失去连接 MySQL,关于sql:错误代码:2013。查询期间与MySQL服务器的连接断开...

    我收到错误代码:2013.当我尝试使用MySQL Workbench向表中添加索引时,在查询错误期间失去了与MySQL服务器的连接. 我还注意到,只要我运行长时间查询,它就会出现. 是否有增加超时值的 ...

  5. jdbc mysql 5.05_JDBC 连接 MySQL 时碰到的小坑

    最近从MS SQL Server换到了MySQL,已经是8.11版本了,安装的时候似乎还用了新的身份认证方式之类的,连接过程中也是磕磕绊绊,碰到很多奇奇怪怪的问题,在此记录下来. 驱动加载: 以前使用 ...

  6. mysql一段时间过后 无法连接_MYSQL连接一段时间不操作后出现异常的解决方案

    最近做的网站使用的是MYSQL数据库 发现 果超过8小时应用程序不去访问数据库,数据库就断掉连接 .这时再次访问就会抛出异常,如下所示: com.mysql.jdbc.exceptions.jdbc4 ...

  7. druid产生大量mysql的sleep连接

    前言 在使用druid连接池后,show full processlist 后发现有大量sleep状态的链接,高峰期时达到1000多个,项目框架用的springmvc+mybatis,由spring管 ...

  8. MySQL数据库连接超时(wait_timeout)问题的处理

    想必大家在用MySQL时都会遇到连接超时的问题,如下图所示:        就是这个异常(com.mysql.jdbc.exceptions.jdbc4.CommunicationsException ...

  9. python连接服务器失败_python-查询期间失去与MySQL服务器的连接

    python-查询期间失去与MySQL服务器的连接 我有一个巨大的表,我需要处理其中的所有行. 我总是收到此"丢失的连接"消息,并且无法重新连接并将光标恢复到原来的位置. 这基本上 ...

最新文章

  1. 重磅丨李飞飞亲自带队,谷歌AI中国中心今天正式成立
  2. Android开发笔记——常见BUG类型之内存泄露与线程安全
  3. 用Java写一个植物大战僵尸简易版!
  4. web ch6 表单基础(部分选学)
  5. hdu 1228 A + B
  6. 面向对象(二)——三大特性(封装、继承、多态)
  7. 进程间通信(五)—信号
  8. 指针变量本质(四十三)
  9. 赫尔默特方差分量估计Python
  10. Eclipse基础--java环境变量设置
  11. 分分钟搞定LabVIEW读取与写入Excel【三易电子工作室】
  12. php正则去掉空格,PHP怎么实现正则去掉空格
  13. 最强大的数据恢复软件
  14. cad安装日志文件发生错误_cad安装出现错误 - 卡饭网
  15. 虚拟机安装教程win7_vm16虚拟机|vmware16安装教程
  16. 【CF633H】Fibonacci-ish II 莫队+线段树
  17. (转)TTime, TDateTime
  18. python之HTML-块级标签
  19. Win10休眠文件更改存储位置
  20. new Proxy()代理

热门文章

  1. GBase 8c基础操作
  2. 【JS30-Wes Bos】实时显示的时钟网页 02
  3. Java项目01-菜谱管理系统控制台实现
  4. 换个方式认识一下——微信公众号搜索公众号列表 API
  5. 【因缘际会】知乎APP的简单的产品体验报告
  6. 二维光子晶体禁带的遗传优化算法实现
  7. 1.1 嵌入式系统的定义和组成
  8. 深度强化学习发展现状及展望:万字总结解读83篇文献
  9. SQL 基础(五)数据查询实战演练一
  10. 2017暴雪php,动视暴雪2017Q4财报 开启全新里程碑