Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1198791
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: Mysql/postgreSQL

2013-07-18 10:24:18

大概初用C-API进行MySQL应用开发的人,都会遇到这种问题,就是当应用停顿了一段时间以后,连接会自动中断掉。

 

仔细试验,会发现这主要与参数interactive_timeout有关,它缺省值28800, 合计,好像是8个小时

 

其实,我们在应用里边,可以在获取连接以后,加大这个值,使应用不会自动中断的连接。

mysql> show variables like '%time%';
+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| connect_timeout          | 5                 |
| datetime_format          | %Y-%m-%d %H:%i:%s |
| delayed_insert_timeout   | 300               |
| flush_time               | 1800              |
| innodb_lock_wait_timeout | 50                |
| interactive_timeout      | 28800             |
| long_query_time          | 10                |
| net_read_timeout         | 30                |
| net_write_timeout        | 60                |
| slave_net_timeout        | 3600              |
| slow_launch_time         | 2                 |
| sync_replication_timeout | 10                |
| system_time_zone         |                   |
| time_format              | %H:%i:%s          |
| time_zone                | SYSTEM            |
| timed_mutexes            | OFF               |
| wait_timeout             | 28800             |
+--------------------------+-------------------+

mysql> set interactive_timeout=1073741824;
Query OK, 0 rows affected (0.06 sec)

mysql> show variables like 'intera%timeout';
+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| interactive_timeout | 31536000 |
+---------------------+----------+
1 row in set (0.02 sec)

mysql> show variables like '%timeout%';
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| connect_timeout          | 5        |
| delayed_insert_timeout   | 300      |
| innodb_lock_wait_timeout | 50       |
| interactive_timeout      | 31536000 |
| net_read_timeout         | 30       |
| net_write_timeout        | 60       |
| slave_net_timeout        | 3600     |
| sync_replication_timeout | 10       |
| wait_timeout             | 28800    |
+--------------------------+----------+
9 rows in set (0.00 sec)

 

如果不放心,可以将wait_timeout也改大。

 

至于在C应用里怎么执行,直接执行SQL语句:

set interactive_timeout=1073741824

即可。

 

其实,要想永不中断,比较理想的方法,是自己实现一个连接池,每隔一个周期(比如10分钟),主动查询一次数据库,这样,这个连接永远是活动的。

阅读(2239) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~