MySQL數據庫鏈接超時(wait_timeout)問題的處理

  想必你們在用MySQL時都會遇到鏈接超時的問題,以下圖所示:

    就是這個異常 (com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure Last packet sent to the server was X ms ago),是因爲MySQL服務在長時間不鏈接以後斷開了,斷開以後的首次請求會拋出這個異常。那麼既然是鏈接超時的問題,就要去MySQL中探究一下連 接時間是怎麼控制的。打開MySQL的控制檯,運行:show variables like ‘%timeout%’,查看和鏈接時間有關的MySQL系統變量,獲得以下結果:

    其中wait_timeout就是負責超時控制的變量,其時間爲長度爲28800s,就是8個小時,那麼就是說MySQL的服務會在操做間隔8小時後斷 開,須要再次重連。也有用戶在URL中使用jdbc.url=jdbc:mysql://localhost:3306 /nd?autoReconnect=true來使得鏈接自動恢復,固然了,這是能夠的,不過是MySQL4及其如下版本適用。MySQL5中已經無效 了,必須調整系統變量來控制了。MySQL5手冊中對兩個變量有以下的說明:
    interactive_timeout:服務器關閉交互式鏈接前等待活動的秒數。交互式客戶端定義爲在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。又見wait_timeout
    wait_timeout:服務器關閉非交互鏈接以前等待活動的秒數。在線程啓動時,根據全局wait_timeout值或全局 interactive_timeout值初始化會話wait_timeout值,取決於客戶端類型(由mysql_real_connect()的鏈接 選項CLIENT_INTERACTIVE定義),又見interactive_timeout
    如此看來,兩個變量是共同控制的,那麼都必須對他們進行修改了。繼續深刻這兩個變量wait_timeout的取值範圍是 1-2147483(Windows),1-31536000(linux),interactive_time取值隨wait_timeout變更,它 們的默認值都是28800。
    MySQL的系統變量由配置文件控制,當配置文件中不配置時,系統使用默認值,這個28800就是默認值。要修改就只能在配置文件裏修改。Windows 下在%MySQL HOME%/bin下有mysql.ini配置文件,打開後在以下位置添加兩個變量,賦值。(這裏修改成388000)
    保存退出,重啓mysql服務,必定是重啓系統服務。即可看到修改結果:

    Linux系統下的配置文件爲/etc/my.cnf。須要多說一點的是:windows下的配置文件具體是哪一個須要從windows系統服務中找到 mysql,打開屬性,看「可執行文件路徑」裏面的參數值,由於它多是my.cnf而不是my.ini,這是因爲安裝時的設置,咱們可能會忽略它。
    至此,修改完成,那麼鏈接超時的問題從數據庫上就解決了。固然在編程時也可使用鏈接池設置超時時間,配置相對簡單。但修改數據庫更爲本質一些。     我的看法。但願對使用者有用。
相關文章
相關標籤/搜索