小时重连有关问题

lxf2023-06-22 20:30:02

MySql 8小时重连学习笔记,转自:/d/file/04/2zjsfy4lag211334 http://hi . Baidu . com/shluxzslnjbhlyr/item/90589 c 3283 C1 b 9352 E0 f 81 c 7?MySQL 8小时问题在MySql的默认设置下,当一个连接空空闲超过8小时,MySql就会

MySql 8小时重连问题
学习笔记,转自:/d/file/04/2zjsfy4lag211334.

http://hi . Baidu . com/shluxzslnjbhlyr/item/90589 c 3283 C1 b 9352 E0 f 81 c 7

MySql 8小时问题

在MySQL的默认设置下,当一个连接空闲超过8小时,MySQL就会断开连接,而c3p0连接池则认为断开的连接仍然有效。在这种情况下,如果客户端代码从c3p0连接池中请求连接,连接池将向客户端返回失败的连接,客户端在使用失败的连接时将引发异常。

这就是传说中的mySql 8小时问题。


解决这个问题有三种方法:
1。增加MySQL的wait_timeout属性的值。
修改/etc/mysql/my.cnf文件,并将其设置在[mysqld]部分:

# Set a connection to wait 8 hours in idle status.
wait_timeout = 86400

相关参数,红色部分
MySQL >显示' % timeout% '之类的变量;
+-+-+
| Variable _ name???????????| Value |
+-+-+
| connect _ time out?????????| 5????|
| delayed_insert_timeout??| 300??|
| innodb _ lock _ wait _ time out | 50???|
| interactive_timeout?????| 28800 |
| net_read_timeout????????| 30???|
| net_write_timeout???????| 60???|
| slave_net_timeout???????| 3600 |
| wait_timeout????????????| 28800 |
+ - + - +?????????
同时,这两个参数只有一个起作用。哪个参数起作用取决于用户连接时指定的连接参数。默认情况下,使用wait_timeout。我的建议是两个参数都修改,避免不必要的麻烦。

这两个参数的默认值是8小时(60*60*8=28800)。

测试把这两个参数改成了0,结果出乎意料。系统自动将该值设置为28800。

换句话说,该值不能设置为permanent。
将这两个参数设置为一年(60*60*24*365=31536000)。

这个链接一年都不能用吧?
set interactive _ time out = 31536000;
set wait _ time out = 31536000;

结果:


wait_timeout的设置中有警告,设置后看结果。


也就是说wait_timeout的最大值只有2147483(大约24天)。

。。。。。。

2.缩短连接池中连接的生命周期,使其小于前一项中设置的wait_timeout的值。
修改c3p0的配置文件,设置:

# How long to keep unused connections around(in seconds)
# Note: MySQL times out idle connections after 8 hours(28,800 seconds)
# so ensure this value is below MySQL idle timeout
cpool.maxIdleTime=25200

在Spring的配置文件中:

???? class="com.mchange.v2.c3p0.ComboPooledDataSource">
????
????

3.定期使用连接池中的连接,这样就不会因为空闲超时而被MySQL断开连接。
修改c3p0的配置文件,设置:

# Prevent MySQL raise exception after a long idle timecpool.preferredTestQuery='SELECT 1'cpool.idleConnectionTestPeriod=18000cpool.testConnectionOnCheckout=true

修改Spring的配置文件:

???????????????? 注:网上所说的 设置 "autoReconnect=true" 的方法,本人测试无效,又看到说这个方法只有mysql4以前的版本才适用......

adminjs.cn是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 Adminjs.cn还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 在Adminjs.cn中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!