mysql 连接8小时_怎么解决mysql连接的8小时问题呢

MySQL服务器有两个参数interactivetimeout和waittime,它们配置的数字决定了连接空闲后多久会失效。它们的默认值是28800,单位是秒,即是8小时。查看它们的值可以通过show variables

如:

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 |

| net_read_timeout | 30 |

| net_write_timeout | 60 |

| slave_net_timeout | 3600 |

| table_lock_wait_timeout | 50 |

| wait_timeout | 28800 |

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

针对数据库连接失效问题,主要有两个方案,

方案一:

把interactivetimeout和waittime的值设置很大,如24小时,具体值可以根据实际设置。此方案会过久占用MySQL服务器的连接,所以不建议使用。

方案二:

c3p0提供了几个参数给用户用于测试连接是否可用。他们分别是automaticTestTable,connectionTesterClassName,idleConnectionTestPeriod,preferredTestQuery,testConnectionOnCheckin, testConnectionOnCheckout。组合使用这几个参数可以检测连接是否可用。idleConnectionTestPeriod,testConnectionOnCheckin,testConnectionOnCheckout,这三个参数设置什么时候检测连接是否可用,而automaticTestTable,connectionTesterClassName,preferredTestQuery用于设置使用什么方式检测连接。

idleConnectionTestPeriod:这个参数设置连接空闲后检测的周期,单位为秒。

testConnectionOnCheckin:布尔值,默认为false。如果值为true,在连接放入连接池时会异步发送检测请求到服务器,检测连接是否可用。

testConnectionOnCheckout:布尔值,默认为false。如果为true,在连接从连接池取出是,会同步发一个检测请求,以保证连接可用。

由于testConnectionOnCheckout每个连接使用前都做检测,这样会降低性能。如果要满足高性能的应用中,不建议使用。所以建议组合使用idleConnectionTestPeriod和testConnectionOnCheckin,以保证连接的可用。

automaticTestTable:如果设置了此值,c3p0会自动在数据库创建一个设置的表,用来检测连接是否可用。

preferredTestQuery:这个值为用于检测连接是否可用的查询语句。在一些数据库,如MySQL中直接使用"SELECT 1"就可以,不用依赖一个数据库存在的表。

connectionTesterClassName: 用户可以自定义一个类来检测数据库连接是否可用。

如果是MySQL服务器,在兼顾性能的方案上,检测时间使用idleConnectionTestPeriod和testConnectionOnCheckin配置,检测方式上最简单的就是"SELECT 1"。参考配置如下:

c3p0.maxIdleTime=3600

c3p0.testConnectionOnCheckout=false

c3p0.testConnectionOnCheckin=true

c3p0.preferredTestQuery=SELECT 1

c3p0.idleConnectionTestPeriod=1800

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值