解决MySQL8小时自动断开连接的问题(DBCP配置)

解决MySQL8小时自动断开连接的问题(DBCP配置),第1张

最近做的一个JavaWeb项目,持久层用SpringJDBC+DBCP+MySQL。一开始只配置了DBCP的一些常用参数,没有注意对空闲连接的检查和回收。项目部署在tomcat后,刚开始使用没用问题。第二天再试图登录时,发生了报错

可以看到,报错信息提示上次交互已经是82664635ms前,超过了MySQL server配置的'wait_timeout'(默认是8小时),所以该连接已经被MySQL回收了,但DBCP不知道连接已被回收,依然试图执行 *** 作,引发了异常。报错信息提示可以修改wait_timeout或者添加autoReconnect=true。

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

这两个参数的默认值是8小时(60 60 8=28800)。 注意:wait_timeout的最大值只允许2147483 (24天左右)

也可以用MySQL命令进行修改

这种办法治标不治本。

2.减少连接池内连接的生存周期,使之小于上一项中所设置的wait_timeout 的值。

也就是说,让已经断开的空闲连接没有机会被使用,提前被回收。

以C3P0配置为例:

DBCP中配置minEvictableIdleTimeMillis即可。

3.配置连接池

定期使用连接池内的连接,使得它们不会因为闲置超时而被 MySQL 断开。并且每次使用连接前检查连接是否可用,定期回收空闲的连接。

修改 c3p0 的配置文件,在 Spring 的配置文件中设置:

DBCP连接池的配置:

DBCP官方配置文档: http://commons.apache.org/proper/commons-dbcp/configuration.html

C3P0的配置标准:

关于MySQL的wait_timeout连接超时问题报错解决方案

Lost connection to MySQL server at 'reading initial communication packetet system error:0翻译成中文就是:在读取初始化数据包时失去到MySQL服务器的连接 系统错误0。通讯包初始化失败,估计是不允许连接访问引起的。解决办法:1、检查是否有防火墙限制2、检查是否有mysql访问权限3、检查my.ini文件里是否设置了bind-address 参数 4、telnet 127.0.0.1 8085 是通的吧?

上一篇 <<<MySQL发展历程与整体架构

下一篇 >>>查询和更新sql语句执行原理

这两个参数的默认值是8小时(60 60 8=28800)。 注意: 1.wait_timeout的最大值只允许2147483 (24天左右),也可以使用mysql命令对这两个属性进行修改。

优点: 避免重复创建tcp三次握手和四次挥手(socket)

缺点: 有可能浪费我们服务器端资源;空闲超时时间

应用场景: 频繁发送请求提高效率

推荐阅读:

<<<MySQL发展历程与整体架构

<<<查询和更新sql语句执行原理

<<<MySQL存储引擎汇总

<<<InnoDB存储引擎的Buffer Pool 缓冲池底层结构

<<<Too many connections分析与processlist解读

<<<MySQL索引底层结构与实现原理

<<<MySql的表锁行锁及间隙锁

<<<MySQL的并发文件及事务隔离级别

<<<MySQL的MVCC多版本控制原理

<<<MySQL常用命令汇总


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6096500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存