MySQL - wait_timeout 变量

Che*_*dar 4 mysql waits

我一直在尝试解决一个问题,我认为在 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)
Run Code Online (Sandbox Code Playgroud)

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

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

Wil*_*ema 5

文件指出

在线程启动时,会话wait_timeout 值从全局wait_timeout 值或全局interactive_timeout 值初始化,这取决于客户端的类型(由mysql_real_connect() 的CLIENT_INTERACTIVE 连接选项定义)。另见interactive_timeout。

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

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

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

更明确地说,在这种情况下,每次wait_timeout需要该值时,最好只检查它,而不是同时检查wait_timeoutinteractive_timeout。它通过wait_timeout使用适当的值自动初始化会话来帮助保持代码的可维护性,然后只需检查该值。否则会导致错误,因为每次需要完成涉及此超时的事情时,都可能无法检查这两个值。