项目最近老是在重启8小时候过后查询出错。check log,发现是mysql数据库默认wait_time时间是8小时。8小时候过后,datasource-pool中的所有连接被mysql-server端释放掉。客户端并不知道,程序直接从datasource-pool中获取连接,并没有检测连接有效性,使用的时候就出错了。
于是就趁此机会,花了两天时间仔细学习了mysql的相关设置和dbcp和c3p0。
由于要测试,肯定不能用mysql默认的8小时来测试了。等的头发都白了,还不能重现。果断重设wait_time时间。mysql 上有段原话
The number of seconds the server waits for activity on a noninteractive connection before closing it. This timeout applies only to TCP/IP and Unix socket file connections, not to connections made using named pipes, or shared memory.
这个数值只对tcp/ip和unix socket 连接有效,对命名管道,和共享内存无效。 mysql的驱动建立的连接是tcp/ip连接吧,果断继续。
然后官网上又说wait_timeout的初始值是从全局wait_timeout和 interactive_timeout.初始化来的。
果断设置全局wait_timeout。 狂百度,大家都说在my.cnf中设置,重启。好吧,my.cnf中设置好,重启mysql。show variables like '%timeout',成功了,但是测试发现没起作用。怎么一回事?百度,就那点货了,找不到。然后还是google。 原来是my.cnf设置的也是session级别的。对mysql驱动建立的连接没起作用,这里我也不明白为什么没起作用,有人知道,可以知会一声,难道mysql驱动建立的连接不是session级别么。 show gloable variables like '%timeout%'。还是默认值。也就是my.cnf设置这种方式是不成功的,直接set globle wait_timeout=10.--Query OK, 0 rows affected (0.00 sec。 怎么回事,没成功?再次show一下。原来已经成功了。 再次测试验证,wait_timeout已经设置成功。
这里为了解决问题,其实我是知道建立测试query和测试表是可以实现的。但是后来又听说连接属性设置autoReconnect=true也可以。设置过后,就像其他人一样,java的mysql驱动是不行的。autoReconnect 和autoReconnectForPool 都不行,四处查询了下。这个参数不适用java的mysql驱动。罢了,还是老老实实的设置validatequery吧。
这里项目中都引入了dbcpjar包和c3p0jar包,配置哪一种数据库连接池都可以。
dbcp: 必须设置validateQuery testOnBorrow也要设置为true。testWhileIdle设置为true也行。再次测试,其实就设置了个validateQuery也行。其他参数不要。
只是这样实际的pool中不会维持最小数量idle的连接。每次获得新的连接的时候验证连接有效性,都失效了了话,重新建立一个。
c3p0:通过idleConnectionTestPeriod和maxIdleTime 这两个参数的配置,具体就是必须小于mysq server端的wait_time时间设置,可以不用validateQuery testTable等复杂设置就解决mysql的wait_time超时的问题。
而且本人不钟爱异步程序。 c3p0不需要额外的validatquery。 不需要额外的表,保持了数据库的干净。 所以就用c3p0
分享到:
相关推荐
MySQL的`wait_timeout`连接超时问题通常出现在长时间无操作的数据库连接上,服务器会自动关闭这些连接以释放资源。这种现象在应用中可能导致突然的数据通信中断,表现为“Communications link failure”等错误,提示...
总之,MySQL的连接超时问题主要是由`wait_timeout`参数引发的,解决方法包括但不限于调整MySQL服务器配置、使用连接池、更新应用程序代码以处理连接失效的情况,以及在使用ORM框架时,按照框架的文档配置相应的连接...
解决连接超时问题需要从多方面考虑,包括调整 wait_timeout 参数的值、使用 Connector/J 连接属性、及时释放连接等方法。只有通过合适的方法,才能避免连接超时问题的出现,提高系统性能和稳定性。
本文将深入解析如何有效解决MySQL出现大量TIME_WAIT状态的问题,通过调整系统内核参数、优化数据库配置以及合理管理连接池策略,确保服务器性能的稳定与高效。 ### 一、理解TIME_WAIT TIME_WAIT是TCP协议中的一个...
例如,MySQL的"wait_timeout"参数控制了数据库连接在无活动状态后多久会被自动关闭,这与连接池的管理策略有关,需要根据实际应用场景进行适当调整。 在实际项目中,正确配置和使用连接池是优化数据库性能的关键。...
但是,如果MySQL服务器设置了较短的`wait_timeout`,即使连接在连接池中,也可能因为MySQL服务器的自动关闭而失效。 为了解决这个问题,有几种策略可以采用: 1. **调整MySQL的`wait_timeout`设置**:增加`wait_...
- **使用连接池**:使用连接池管理数据库连接,可以更有效地复用和回收连接。 - **监控和报警**:设置监控工具监控MySQL的连接数,当达到阈值时触发报警,以便及时处理。 - **定期审查和调整参数**:根据业务增长和...
Spring Boot 解决 Mysql ...解决 Spring Boot 连接 Mysql 断连问题可以使用多种方法,包括在 application.properties 文件中添加配置项、修改 Mysql 的 wait_timeout 参数等。选择合适的方法可以根据实际情况进行选择。
标题 "Mybatis破MySql8小时断线问题1" 指的是在使用Mybatis框架与MySQL数据库交互时遇到的一个常见问题,即由于MySQL数据库的连接超时机制导致的8小时断线。描述中提到,当数据库连接闲置时间超过MySQL默认设定的8...
### MySQL异常...通过适当调整MySQL服务器的`wait_timeout`配置或C3P0连接池的相关参数,可以有效地解决此类问题。在实际操作过程中,还需要根据具体的业务场景选择合适的配置方案,以达到最佳的效果。
在 MySQL 中,可以通过设置 wait_timeout 参数来控制连接的空闲时间。当连接闲置时间超过这个值时,MySQL 将关闭该连接。默认情况下,wait_timeout 的值为 28800 秒,即 8 小时。 知识点3: Hibernate 配置文件中...
通过合理配置c3p0的各项参数,可以有效避免因数据库连接问题而导致的应用程序异常中断,从而保障系统的稳定运行。在实践中,还需要根据具体的应用场景不断调整优化这些配置,以达到最佳的性能效果。
需要注意的是,尽管调整`interactive_timeout`可以解决连接超时问题,但过度增加超时时间可能会导致服务器资源被长时间占用,尤其是在高并发的环境中。因此,优化数据库连接管理和使用连接池是更推荐的做法。 连接...
如果数据库连接池中的连接在超过`wait_timeout`设定的时间后未被使用,MySQL会自动断开这些连接。这可能导致应用程序在尝试使用这些已断开的连接时遇到“Communications link failure due to underlying exception”...
Python中的pymysqlpool是一个专为MySQL数据库设计的连接池组件,它可以帮助开发者更有效地管理和复用数据库连接,从而提高程序的性能和资源利用率。在多线程环境中,pymysqlpool提供了线程安全的连接池,避免了频繁...
在某些情况下,你可能还需要调整与最大连接数相关的其他系统变量,如`wait_timeout`和`interactive_timeout`,这些参数控制连接的超时时间: ```ini [mysqld] wait_timeout = 300 interactive_timeout = 300 ``` #...
10. **wait_timeout**:连接在无活动后自动关闭的等待时间。可以根据业务需求调整,例如从28800秒改为7200秒。 优化MySQL配置时,必须考虑到服务器的硬件资源,特别是内存。调整参数后,务必通过重启MySQL服务来...