客户希望设置参数,将长时间的空闲连接断开,这里涉及到interactive_timeout和wait_timeout,这两个MySQL的默认值是28800(单位秒,对应8小时),
京东云控制台默认设置为86400(24小时)。
这两个参数字面含义如下:
(1)interactive_timeout: 服务器关闭交互式连接前等待活动的秒数,比如mysql客户端属于此类连接。
(2)wait_timeout: 服务器关闭非交互连接之前等待活动的秒数,比如jdbc属于此类连接。
但对于空闲连接的控制,实际在于session级别的wait_timeout,而这个session级别的参数,并不完全取决于global的wait_timeout,看下面例子:
改参数前:mysql> show variables where variable_name
in('interactive_timeout','wait_timeout');
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
| wait_timeout | 28800 |
+---------------------+-------+
mysql客户端修改全局参数wait_timeout为10s:
mysql> set global wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)
打开另外一个客户端,查看此参数值:
mysql> show variables where variable_name
in('interactive_timeout','wait_timeout');
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
| wait_timeout | 28800 |
+---------------------+-------+
2 rows in set (0.00 sec)
发现session级别的值并没有改为10,再看一下全局参数:
mysql> show global variables where
variable_name in('interactive_timeout','wait_timeout');
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
| wait_timeout | 10 |
+---------------------+-------+
2 rows in set (0.00 sec)
全局参数确实修改了,但session级别的wait_timeout取决于客户端的连接方式,此时mysql客户端是交互式连接方式,因此session级别的wait_timeout取决于全局的interactive_timeout,所以看上去没变,对于连接来说实际没有生效,10s后并不会断开。此时如果我们将interactive_timeout改为20s,再看一下效果:
mysql> set global interactive_timeout=20;
Query OK, 0 rows affected (0.00 sec)
另外一个客户端看session参数,wait_timeout已经修改为20:
mysql> show variables where variable_name
in('interactive_timeout','wait_timeout');
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| interactive_timeout | 20 |
| wait_timeout | 20 |
+---------------------+-------+
2 rows in set (0.00 sec)
总结一下:
1.
2.
感谢各位童鞋阅读,如果能够对大家有所帮助,欢迎点赞转发评论。
关注我们的公众号:云服务飞行团,更多内容持续放送!