2

这个问题C:\Program Files\MySQL\MySQL Server 5.5\my.ini之后,我在(相当于 Linux 的)中设置了以下 MySQL 参数my.cfg

[mysqld]
wait_timeout=2147483

重启Windows后我用SQLyog看看效果:

  • SHOW SESSION VARIABLES LIKE 'wait_timeout'结果是 28800
  • SHOW GLOBAL VARIABLES LIKE 'wait_timeout'结果是2147483

怎么会?我认为全局参数被用作每个新会话的默认值。

4

2 回答 2

3

奖励答案:我已经浏览了 sqlYog 的源代码。

这是一个feature:如果设置了超时> 28800,则硬编码将会话超时更改为 28800 in CommonHelper.cpp

3314   //Session wait_timeout3315   timeout = conn->m_strwaittimeout.GetAsUInt32();
3316 
3317   if(timeout > 28800 || timeout <= 0)
3318     conn->m_strwaittimeout.SetAs("28800");
3319 
3320   strtimeout.Sprintf("/*!40101 set @@session.wait_timeout=%s */", conn->m_strwaittimeout.GetString());
3321   mysql_options(*pmysql, MYSQL_INIT_COMMAND, strtimeout.GetString());

这解释了你所看到的。

于 2011-11-20T16:09:24.190 回答
1

有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeout

MySql 'wait_timeout' Global Variable vs Variable的答案也可能对您有所帮助。

基本上,这是重要的一点:

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

于 2011-11-20T10:54:40.027 回答