2021年 · MySQL

mysql连接超时设置

mysql数据库有一个wait_timeout的配置,默认值为28800(即8小时mysql server将主动断开这条连接,后续在该连接上进行的查询操作都将失败)

interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。
通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。
interactive_timeout:交互式连接超时时间(mysql工具、mysqldump等)
wait_timeout:非交互式连接超时时间,默认的连接mysql api程序,jdbc连接数据库等

方法一:(无需重启服务,但重启后会失效)
查看mysql server超时时间:
MySQL [(none)]> show global variables like ‘wait_timeout’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| wait_timeout | 28800 |
+—————+——-+
1 row in set (0.01 sec)

设置mysql server超时时间(以秒为单位):
针对非交互式查看链接超时时间:
MySQL [(none)]> show global variables like ‘wait_timeout’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| wait_timeout | 28800 |
+—————+——-+
1 row in set (0.01 sec)
针对非交互式链接临时设置超时时间(数据库重启后会恢复默认值)
MySQL [(none)]> set global wait_timeout=288000;
Query OK, 0 rows affected (0.00 sec)
针对非交互式链接,设置后查看所设置的值是否成功:
MySQL [(none)]> show global variables like ‘wait_timeout’;
+—————+——–+
| Variable_name | Value |
+—————+——–+
| wait_timeout | 288000 |
+—————+——–+
1 row in set (0.00 sec)
针对交互式连接查看链接超时时间:
MySQL [(none)]> show global variables like ‘interactive_timeout’;
+———————+——-+
| Variable_name | Value |
+———————+——-+
| interactive_timeout | 28800 |
+———————+——-+
1 row in set (0.00 sec)
针对交互式连接临时设置超时时间(数据库重启后会恢复默认值)
MySQL [(none)]> set global interactive_timeout=288000;
Query OK, 0 rows affected (0.00 sec)
针对交互式连接,设置后查看所设置的值是否成功:
MySQL [(none)]> show global variables like ‘interactive_timeout’;
+———————+——–+
| Variable_name | Value |
+———————+——–+
| interactive_timeout | 288000 |
+———————+——–+
1 row in set (0.00 sec)

方法二:(mysql服务需要重启才能生效)
在配置文件/etc/my.cnf中添加如下:
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000