mysqlapi:MySQL C-API开发应用时的连接超时问题



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

仔细试验会发现这主要和参数eractive_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 |
| eractive_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> eractive_timeout=1073741824;
Query OK, 0 rows affected (0.06 sec)

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

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

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

至于在C应用里如何执行直接执行SQL语句:

eractive_timeout=1073741824

即可

其实要想永不中断比较理想思路方法是自己实现个连接池每隔个周期(比如10分钟)主动查询次数据库这样这个连接永远是活动
Tags:  mysql连接数据库 java连接mysql mysql连接 mysqlapi

延伸阅读

最新评论

发表评论