数据库
首页 > 数据库> > MySQL – wait_timeout变量

MySQL – wait_timeout变量

作者:互联网

我一直试图通过在我的CentOS机器上更改MySQL(5.1.67)中的wait_timeout变量来解决我认为可能有帮助的问题.

所以,我用我想要的值(180)更新了/etc/my.cnf,并重新启动了MySQL,但现在我很惊讶地发现我为wait_timeout获取了不同的值,具体取决于我的显示方式(见下文) :

mysql> show global variables like "%wait%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 180   |
+--------------------------+-------+
3 rows in set (0.00 sec)

mysql> show variables like "%wait%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+
3 rows in set (0.00 sec)

我猜第二个查询显示会话变量,而不是全局变量,但我不明白为什么他们会退出我的MySQL会话,重新启动MySQL,然后重新登录.他们怎么会不一样?而且,我想,如何确保相同的值(180)在所有内容中保持一致?

任何建议/帮助表示赞赏.谢谢.

解决方法:

documentation

On thread startup, the session wait_timeout value is initialized from
the global wait_timeout value or from the global interactive_timeout
value, depending on the type of client (as defined by the
CLIENT_INTERACTIVE connect option to mysql_real_connect()). See also
interactive_timeout.

由于您是通过命令行而不是脚本进行连接,因此将CLIENT_INTERACTIVE自动用作连接选项是有意义的.因此,正在使用interactive_timeout值,默认值为28800.

要使会话wait_timeout值为180,请将interactive_timeout值更新为180.

至于为什么会这样,我只能推测.但是,作为一名程序员,我知道只要在检查执行某个操作时只需要查找一个值,而不是必须检查多个值,并确保每次我都检查所有这些值,这样更有用想检查一下.

更明确地说,在这种情况下,每次需要wait_timeout值时,最好只需要检查,而不是wait_timeout和interactive_timeout.它通过使用适当的值自动初始化会话wait_timeout来帮助保持代码可维护,然后只需检查一个值.否则会引发错误,因为每次需要执行涉及此超时的事情时,可能无法检查这两个值.

标签:mysql,waits
来源: https://codeday.me/bug/20190806/1601075.html