应用程序和mysql数据库建立连接,如果超过8小时应用程序不去访问数据库,数据库就断掉连接 。这时再次访问就会抛出异常。
mysql> show variables like '%timeout%'; +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 28800 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 3600 | | wait_timeout | 28800 | +-----------------------------+----------+ 12 rows in set
同一时间,interactive_timeout
,wait_timeout
这两个参数只有一个起作用。
到底是哪个参数起作用,和用户连接时指定的连接参数相关,缺省情况下是使用wait_timeout。
也可以修改/etc/my.cnf,修改后重起mysql 参数如下:
[mysqld] interactive_timeout=28800000 wait_timeout=28800000
以上方案不推荐,推荐从数据源方面的设置优化
<!--配置连接池c3p0 idleConnectionTestPeriod 参数--> <!--连接池会每隔一定时间对空闲连接进行一次测试,从而保证有效的空闲连接能每隔一定时间访问一次数据库,将于MySQL 8小时无会话的状态打破。为0则不测试。--> <property name="idleConnectionTestPeriod" value="60" /> <property name="preferredTestQuery" value="SELECT 1"/> <property name="testConnectionOnCheckout" value="true"/>