mysql超时时间怎么改 mysql设置执行sql超时时间( 二 )


由上面的分析可知,MySQL 文档对于该参数的描述已经过时,现在的 MYSQL_OPT_READ_TIMEOUT 并不会出现三倍超时的问题 。而 Bug #31163 中的处理结果也是将文档中该参数的描述更新为实际读取超时时间是设定时间的三倍 。也许是 MySQL 的维护者们在后续版本更新时忘记更新文档吧 。
内网连接数偶尔突增数据库连接数突增是数据库连接资源没有及时释放 。
连接数据库超时是因为数据库连接资源释放的过早 。
现象1:每次上线项目DB的连接数会突增 。
原因:是项目关闭的时候没有释放连接资源导致 。
DB的connection资源没有正常释放,导致项目启动的时候再次创建数据库连接资源 , 就出现了连接数突增的现象 。一段时间后mysql根据wait_time的配置,自动回收conncetion,所以连接数又回落回来 。
如果是是DB的connection资源没有正常释放 , 最可能的是在项目关闭的时候没有释放掉DB的连接资源 。
经过在查看线上jekins的上线脚本后,发现线上停止项目使用的kill进程的方式来停止项目 。那么就证明假设都成立了 。接下来解决问题环节(程序员们喜闻乐见的百度和谷歌环节了) 。
解决方案
1.主动释放
项目关闭使用正确的stop命令,保证项目能正确的释放掉各种资源 。
执行命令:xxxx_tomcat.stop
2.被动释放
现象2:连接数据库超时 。
com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was58129 seconds ago.The last packet sent successfully to the server was58129seconds 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 valuesforclient timeouts, or using the Connector/J connection property'autoReconnect=true'to avoidthisproblem. mysql
问题原因 :连接池里的connection资源mysql主动提前释放导致 。
原因是在datasource连接池中配置的最大空闲时间到达之前(比如maxIdleTime,不通数据源配置名不一样) , 已经到达mysql的wait_timeout(最大空闲时间),是mysql主动把connection资源回收 。但是项目中的连接池还持有connection,所以当项目中使用connection的时候会报CommunicationsException错误 。
解决方案
1.修改mysql的wait_time,interactive_timeout把值调大(不建议如果太大,可能导致连接数较多,引起性能下降)
2.配置JDBC的重连机制autoReconnect(不建议,只有4.x版本,起作用)
jdbc:mysql://localhost:3306/test?user=rootpassword=autoReconnect=true
3.减少连接池内的存活时间+JDBC探活(建议,搭配使用效果好)
最大闲置资源时间的配置
两个现象的解决方案都指向了同一个配置就是connection的最大闲置资源时间 。
有两个地方可以配置最大闲置资源时间:
1.在项目的连接池中配置 , 比如maxIdleTime 。
2.在mysql中也可以配置,interactive_timeout和wait_timeout 。
三、MySql中的connection超时配置
mysql的配置中有interactive_timeout和wait_timeout两个参数,这两个参数有时候还存在覆盖的关系,所以还是给大伙说清楚一点两个的区别和联系方便大家理解 。
建议interactive_timeout和wait_timeout参数值配置成一样的 。
1.interactive_timeout和wait_timeout概念
mysql的连接超时时间配置
wait_timeout非交互式连接超时通过jdbc连接数据库是非交互式连接,最大闲置时间用于规定一个connection最大的空闲时间,默认是28800秒,超时MySQL会自动回收该connection 。
interactive_timeout交互式连接超时通过mysql客户端连接数据库是交互式连接,最大闲置时间用于规定一个connection最大的空闲时间 , 默认是28800秒,超时MySQL会自动回收该connection 。

推荐阅读