wait_timeout【Mysql】解决方案
想必大家在用MySQL時都會遇到連接超時的問題,如下圖所示:
圖1 超時報錯
就是這個異常(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系統變量,得到如下結果:
圖2 查看mysql timeout
其中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就是默認值。要修改就只能在配置文件里修改。打開/etc/my.cnf,打開后在如下位置添加兩個變量,賦值。(這里修改為388000)
保存退出,重啟mysql服務,一定是重啟系統服務。便可看到修改結果:
圖3 修改配置
至此,修改完成,那么連接超時的問題從數據庫上就解決了。當然在編程時也可以使用連接池設置超時時間,配置相對簡單。但修改數據庫更為本質一些。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的wait_timeout【Mysql】解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql超经典的8小时问题-wait_
- 下一篇: sqlserver2010兼容sqlse