mysql 連接超時解決方法

jdbc開發時候遇到mysql連接超時,斷開服務的問題。經過查資料,找到問題解決方法,總結如下。

問題原因:

由於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,這是由於安裝時的設置,我們可能會忽略它。

    至此,修改完成,那麼連接超時的問題從數據庫上就解決了。當然在編程時也可以使用連接池設置超時時間,配置相對簡單。但修改數據庫更爲本質一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章