2011-10-25 120 views
2

我目前在一個涉及mysql的java程序中工作。我遇到了一個問題這些消息:設置MySql的wait_timeout會話變量

通信鏈路故障。從服務器成功收到的最後一個數據包 爲174,165,153毫秒前。最後一個數據包成功發送到服務器 是4毫秒前。

我相信這與會話變量'wait_timeout'有關。我的假設可能是錯誤的,所以我在此確認。這真的是因爲'wait_timeout'會話變量?這個錯誤是否意味着我的數據庫連接「已過期」,因爲會話超時已經失效?如果是的話,我有另一個問題..我不能重現上述錯誤..

這是我想要複製錯誤。

  1. 設置wait_timeout變量5這是原本28800(8個小時)。

    mysql> set session wait_timeout=5;

  2. 考慮到我的下一次嘗試訪問數據庫將應用此,我將運行這段代碼:

    Class.forName("com.mysql.jdbc.Driver"); 
        oConnection = DriverManager.getConnection(sUrl,sUser,sPass); 
        System.out.println("Database Connection Established.\n"); 
        Thread.sleep(6000); 
    
        executeSimpleQuery(); 
    

    executeSimpleQuery()功能只是執行一個簡單的SELECT * FROM語句來檢查連接是否還在工作。顯然,如果wait_timeout只有5,並且讓線程休眠6秒,連接現在就會過期,並且應該產生錯誤。但是,預期的結果不會發生,而是執行查詢。

我該怎麼做才能複製錯誤?

回答

2

您爲當前會話設置了wait_timeout = 5;然後打開另一個會話(在Java應用程序中)並執行查詢。嘗試在打開連接後設置此變量,或者在全局範圍內設置它。

例如 -

SET @@global.wait_timeout = 15; -- Set global variable 
SET @@local.wait_timeout = 25; -- Set session variable 
SELECT @@global.wait_timeout, @@local.wait_timeout; -- Check global and session variables 
+0

非常感謝你這一點。雖然我沒有使用wait_timeout的全局設置,因爲我需要處理每個會話的連接。再次感謝 – Oneb