2011-11-20 45 views
1

this question,我設置C:\Program Files\MySQL\MySQL Server 5.5\my.ini下的MySQL參數(Linux的的my.cfg等效):MySQL的WAIT_TIMEOUT在SQLyog的不正確

    [mysqld] 
    wait_timeout=2147483 
    

    重新啓動Windows我以前SQLyog看到效果後

  • SHOW SESSION VARIABLES LIKE 'wait_timeout'給出了28800的結果
  • SHOW GLOBAL VARIABLES LIKE 'wait_timeout'給出了2147483的結果

怎麼回事?我認爲全局參數被用作每個新會話的默認參數。

回答

2

獎金答案:我已經通過了sqlYog的源代碼。

這是一個feature:如果超時設置> 28800,它是硬編碼 在會話超時改爲28800在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()); 

這解釋了你所看到的。

+0

你是對的! Eljakim,我要改變這個問題,所以這是答案並接受它。你可能希望刪除你的其他答案,因爲它會變得無關緊要 – Jonathan

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 值初始化,這取決於客戶端的類型(如由 CLIENT_INTERACTIVE連接選項定義到mysql_real_connect())。另請參閱 interactive_timeout。

+0

將'wait_timeout = 2147483'和'interactive_timeout = 2147483'放在'[mysqld]'下 - 它沒有幫助 – Jonathan

+0

你確定SQLyog不是問題嗎?在您定義連接的屏幕上,您可以指定會話超時值。 – Eljakim