精华内容
下载资源
问答
  • was数据库连接超时时间
    2021-02-01 21:39:33

    查看线上日志发现了如下的异常:

    ERROR 500.jsp -

    Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 31,680,464 milliseconds ago.  The last packet sent successfully to the server was 31,680,469 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.

    线上服务器wait_timeout的值为:

    select @@wait_timeout;

    +----------------+

    | @@wait_timeout |

    +----------------+

    |           7200 |

    +----------------+

    即两个小时内没有连接的话,服务器会断掉连接。等这时有请求过来的话,请求池会分配一中断的连接,于是报了如上的异常。

    经搜索可以在连接池中添加一些额外的配置来避免此问题,如DBCP:

    更多相关内容
  • 数据库连接超时问题

    万次阅读 2019-06-19 17:02:48
     如果数据库连接空闲时间大于wait_timeout,则操作web应用就会出现上述异常,解决办法可以设置wait_timeout的时间为一个适合实际应用场景的时间。设置命令为: set global wait_timeout=28800;  时间单位...

    问题:

    com.alibaba.druid.pool.DruidDataSource - discard connection
    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    The last packet successfully received from the server was 109,470 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.

    java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

    原因分析:

    数据库连接强行断开,但是web应用不知道数据库已经断开(或者理解为连接池子不知道数据库已经断开),还是通过连接池子连接数据库与数据库的交互,这样会导致如上错误。

    解决方案:

    1.查询mysql数据库的非交互式最大等待时间wait_timeout

       一般数据库默认的wait_timeout为8小时。查询wait_timeout的命令如下:

    mysql> show global variables like 'wait_timeout'; 

      如果数据库连接空闲时间大于wait_timeout,则操作web应用就会出现上述异常,解决办法可以设置wait_timeout的时间为一个适合实际应用场景的时间。设置命令为:

    set global wait_timeout=28800;  

           时间单位为ms,但是wait_timeout设置页不要太大,如果太大会导致数据库连接打开时间过长,在show processlist时,看到很多sleep状态的连接,从而造成too many connections错误;如果wait_timeout设置太小的话会导致连接关闭很快,从而使一些预设置的连接不起作用。

     2.在确认1步骤wait_timeout配置没有问题的话,查看数据库配置设置是否有问题

        dbcp的参数设置意义

        参考连接:http://commons.apache.org/proper/commons-dbcp/configuration.html

    字段名称设置值说明
    initialSize5初始化连接:连接池启动时创建的初始化连接数据量
    maxActive20最大活动连接:连接池在同一时间能够分配的最大活动连接的数量,如果设置为非正数则表示不限制
    maxIdle10最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制
    minIdle2最小空闲连接数:当数据库连接池的空闲数少于这个数目的时候,数据库自动创建空闲连接,当设置为0的时候,不创建空闲连接
    maxWait1800最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数),超过时间则抛出异常,如果设置为-1则无限等待
    minEvictableIdleTimeMillis300000连接池中的空闲连接保持空闲不被空闲连接回收器线程回收的最小时间值,单位毫秒
    timeBetweenEvictionRunsMillis120000空闲连接回收器线程休眠的时间值,即每隔这个时间值空闲连接回收器线程回收空闲连接,单位毫秒
    numTestsPerEvictionRun3每次空闲连接回收器线程线程运行的时候检查的连接数量
    validationQueryselect 1

    在把连接返回给调用者之间,SQL查询,用来验证从连接池子取出连接,是一个用来检测连接是否有效的SQL,要求是一个查询语句,如果

    validationQuery为null,testWhileIdle、testOnBorrow、testOnReturn都不起作用

    testWhileIdletrue建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
    testOnBorrowfalse是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个.申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
    testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
    username/数据库连接的用户名
    password/数据库连接的密码
    url/数据库连接的url
    driverClassName/

    数据库连接的驱动类的类名,例如

    com.mysql.jdbc.Driver

         2.1通过设置

         <property name="validationQuery" value="select 1" />

                数据库每次执行sql会额外执行一条提供的validationQuery sql,来减少出现文章中提到的错误问题。

         2.2通过配置timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis

               如果timeBetweenEvictionRunsMillis大于0,每过 timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查连接池中的连接的闲置时间是否大于 minEvictableIdleTimeMillis毫秒,是则销毁此对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。如果连接池的连接数小于最小空闲连接数,则创建数据库连接,同时检查连接池的连接是否小于maxIdle,是则把刚创建的连接放入连接池中,否则销毁此对象。

              数据库在重启后minEvictableIdleTimeMillis前访问web应用,数据库连接池子连接的是老的连接,所以会出现文章中提到的问题。这时可以设置minEvictableIdleTimeMillis的大小要小于mysql的wait_timeout时间,并且minEvictableIdleTimeMillis的值不要设置太小,太小的话会增加系统开销。timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis时间可以适当调整,具体以实际情况为准。

         2.3JDBC配置mysql连接url的重连机制

              在数据库的连接url中增加数据库自动重连接机制autoReconnect=true         

        

     

    展开全文
  • 博主在做web开发时遇到MySql数据库连接超时的问题。控制台报错如下:Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC ...

    博主在做web开发时遇到MySql数据库连接超时的问题。

    控制台报错如下:

    Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link

    failure Last packet sent to the server was 1 ms ago.

    由于用到了spring+mybatis的框架,刚开始以为是mybatis引起的,后来才发现是MySql数据库连接超时。

    这个异常是由于MySQL服务再长时间不连接之后断开了,断开之后的首次请求会抛出异常。那么既然是超时问题,就要去探究一下Mysql连接时间是怎么控制的。打开Mysql的控制台,运行:show variables like '%timeout%'; ,查看和连接时间有关的Mysql系统变量,如图:

    0e51f700d3795b2d2b4a81d02b93907f.png

    其中wait_timeout就是负责超时控制的遍历,其时间为长度28800s,就是8个小时,那么就是说Mysql的服务会在操作间隔8小时后断开,需要再次重连。

    interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。

    wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。

    如此看来,两个变量是共同控制的,那么都必须对他们进行修改了。继续深入这两个变量wait_timeout的取值范围是1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。

    Mysql的系统变量由配置文件控制,当配置文件中不配置时,系统使用默认值,这个28800就是默认值。Linux系统下的配置文件为/etc/my.cnf,windows下在[MySQL_HOME]/bin下的mysql.ini。

    修改之后保存退出,重启mysql服务。

    如果不修改mysql的配置,需要直接在spring-mybatis的配置文件中实现,可以采用以下的方式:

    如上面代码所示,dirverClassName,url,username,password是数据库的连接配置,都很常见。关键是validationQuery和testOnBorrow两个参数。Spring建议使用的数据源有Apache的DBCP和C3P0,这里使用的是DBCP,前面四个参数是基本参数,而后面两个参数是连接健康情况的参数,如下图所示:

    866cb1468d61b7bbedfc82ce27a935b4.png

    添加了validationQuery和testOnBorrow两个参数可以保证在mysql服务长时间不连接断开之后的请求不会出现异常情况,当然也可以在配置文件中将testOnReturn等之类的配置加上。

    展开全文
  • spring MVC myBatisc 数据库连接超时更新时间:2016-05-26 17:02:542066次阅读评论 1HTTP Status 500 - Request processing failed; nested exception is ...

    spring MVC myBatisc 数据库连接超时

    更新时间:2016-05-26 17:02:54

    2066次阅读

    评论 1

    HTTP Status 500 - Request processing failed; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was43355 milliseconds ago.The last packet sent successfully to the server was 43355 milliseconds 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.

    服务器连接时老是出现:连接超时需重连,数据等待超时默认是8个小时,那么我们可以把数据的会话时间延长

    方案:在数据库里面设置等待超时时间:一年 31536000;(秒为单位)

    mysql> show global variables like '%time_out%';

    Empty set

    mysql> set global wait_timeout = 31536000;

    Query OK, 0 rows affected

    mysql> show global variables like '%time_out%';

    Empty set

    mysql> set global interactive

    _timeout = 31536000;

    Query OK, 0 rows affected

    mysql> show global variables like '%time_out%';

    Empty set

    mysql> show global variables like '%wait_

    timeout%';

    +--------------------------+----------+

    | Variable_name            | Value    |

    +--------------------------+----------+

    | innodb_lock_wait_timeout | 50       |

    | lock_wait_timeout        | 31536000 |

    | wait_timeout             | 2147483  |

    +--------------------------+----------+

    3 rows in set

    mysql>

    这样数据库等待 超时的时间都延长了

    create:2016-04-29

    阅读量(2066)

    评论(1

    )

    36f1787e567c0ecacff90ab4df928413.png

    楼主  零零一  2016-07-08 22:04  发表

    重启mysql服务器后,sql命令查询参数

    就成这样了mysql> show variables like '%timeout%'

    -> ;

    +----------------------------+----------+

    | Variable_name              | Value    |

    +----------------------------+----------+

    | connect_timeout            | 10       |

    | delayed_insert_timeout     | 300      |

    | innodb_lock_wait_timeout   | 50       |

    | innodb_rollback_on_timeout | OFF      |

    | interactive_timeout        | 28800    |

    | lock_wait_timeout          | 31536000 |

    | net_read_timeout           | 30       |

    | net_write_timeout          | 60       |

    | slave_net_timeout          | 3600     |

    | wait_timeout               | 28800    |

    +----------------------------+----------+

    wait_timeout 又恢复默认值了 8小时--显然,sql命令只能缓存性保存当前状态,重新启动,都变“泡沫”了

    后面直接在my.ini

    该配置,写死了配置,给其配置了21天

    在[mysqld]下添加

    interactive_timeout=1814400

    wait_timeout=1814400

    重启MySql服务器mysql> show variables like '%timeout%';

    +----------------------------+----------+

    | Variable_name              | Value    |

    +----------------------------+----------+

    | connect_timeout            | 10       |

    | delayed_insert_timeout     | 300      |

    | innodb_lock_wait_timeout   | 50       |

    | innodb_rollback_on_timeout | OFF      |

    | interactive_timeout        | 1814400  |

    | lock_wait_timeout          | 31536000 |

    | net_read_timeout           | 30       |

    | net_write_timeout          | 60       |

    | slave_net_timeout          | 3600     |

    | wait_timeout               | 1814400  |

    +----------------------------+----------+

    返回顶部

    登录评论

    展开全文
  • 最近碰到一个mysql5数据库的问题。就是一个标准的servlet/tomcat网络应用,后台使用mysql数据库。问题是待机一晚上后,第二天早上***次登录总是失败。察看日志发现如下错误:...
  • 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, ...
  • 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 longe...
  • The last packet successfully received from the server was 499,318 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.; nested exception is ...
  • 设置MySQL数据库超时

    千次阅读 2021-01-28 07:20:49
    数据库连接超时是由于数据库长时间不连接之后断开所导致的情况,断开之后首次就会给你抛个异常...输入密码后进入接着敲入命...
  • 操作系统 Windows 10 ...关于针对数据库连接,之前没有特别注意过,直到遇到如下问题: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.Communication
  • 必须确保你的druid jdbc版本为1.2.6 这个问题只有在druid 1.2.6里解决,因为只要是低于druid 1.2.6版本,本身就存在bug,无论你怎么设都会打断...这个很正常,那是因为:MYSQL不可能无限接在接受一个数据库连接请求
  • 点击上方"田守枝的技术博客",关注我数据库是开发过程中最常用的组件,然而我们经常会遇到各种各样的超时异常,如:connect timeout:建立数据库连接超时socket...
  • 数据库查询超时排查

    2021-12-07 16:53:31
    新的请求再次进来,从数据库连接池获取数据库连接等待超时,导致出现错误。 系统A过多的慢查询导致资源耗尽,系统挂掉,数据库压力减轻,系统B连接恢复正常。 解决方式 增大数据库连接等待时间即SET GLOBAL wait_...
  • 最近碰到一个mysql5数据库的问题。就是一个标准的servlet/tomcat网络应用,后台使用mysql数据库。问题是待机一晚上后,第二天早上第一次登录总是失败。察看日志发现如下错误:...
  • DB的connection资源没有正常释放,导致项目启动的时候再次创建数据库连接资源,就出现了连接数突增的现象。一段时间后mysql根据wait_time的配置,自动回收conncetion,所以连接数又回落回来。 如果是是DB的...
  • 解决mysql5数据库连接超时问题以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!最近碰到一个mysql 数据库的问题 就是一个标准的servlet/tomcat网络应用...
  • mysql数据库连接超时

    2021-01-19 00:46:31
    check log,发现是mysql数据库默认wait_time时间是8小时。8小时候过后,datasource-pool中的所有连接被mysql-server端释放掉。客户端并不知道,程序直接从datasource-pool中获取连接,并没有检测连接有效性,使用的...
  • 数据库相关各种超时时间

    千次阅读 2019-04-27 19:58:26
    事务超时时间Transaction Timeout   事务超时时间规定了事务执行时间的上限,通常包含两大部分:SQL执行时间,以及业务处理时间,即Transaction timeout = Statement Timeout * N(所有SQL执行总时间) + 业务处理...
  •  The last packet sent successfully to the server was 35,662 milliseconds ago. at sun.reflect.GeneratedConstructorAccessor126.newInstance(Unknown Source) ~[na:na] at sun.reflect....
  • 一、问题现象:连接池中的链接空闲超过一定时间后,再次访问数据库时候出现如下异常:com.mysql.jdbc.Communication***ception: Communications link failure due to underlying exception:** BEGIN NESTED ...
  • 连接数据库超时是因为数据库连接资源释放得过早。现象1:每次上线项目DB的连接数会突增。原因:是项目关闭的时候没有释放连接资源导致。DB的connection资源没有正常释放,导致项目启动的时候再次创建数据库连接资源,...
  • 关于Oracle连接超时的问题

    千次阅读 2021-05-08 02:08:30
    如果连接池设置单个连接闲置时间大于数据库连接超时时间,则连接池中的连接发出数据请求时会出现Connect timeout occurred错误,这是由于连接超时所产生的问题,在10.2.0.1.0版本中sqlnet.inbound_connect_timeout...
  • MySQL 数据库连接超时的报错org.hibernate.util.JDBCExceptionReporter–SQLError:0,SQLState:08S01org.hibernate.util.JDBCExceptionReporter–Thelastpacketsuccessfullyreceivedfromtheserverwas43200millise...
  • 错误信息:The last packet successfully received from the server was 35,270,650 milliseconds ago. The last packet sent successfully to the server was 1 milliseconds ago.; nested exception is ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,996
精华内容 4,798
热门标签
关键字:

was数据库连接超时时间