wait_timeout【Mysql】解决方案
想必大家在用MySQL時(shí)都會遇到連接超時(shí)的問題,如下圖所示:
圖1 超時(shí)報(bào)錯(cuò)
就是這個(gè)異常(com.mysql.jdbc.exceptions.jdbc4.
CommunicationsException:Communications link failure Last packet sent to the server was X ms ago),是由于MySQL服務(wù)在長時(shí)間不連接之后斷開了,斷開之后的首次請求會拋出這個(gè)異常。那么既然是連接超時(shí)的問題,就要去MySQL中探究一下連接時(shí)間是怎么控制的。打開MySQL的控制臺,運(yùn)行:show variables like ‘%timeout%’,查看和連接時(shí)間有關(guān)的MySQL系統(tǒng)變量,得到如下結(jié)果:
圖2 查看mysql timeout
其中wait_timeout就是負(fù)責(zé)超時(shí)控制的變量,其時(shí)間為長度為28800s,就是8個(gè)小時(shí),那么就是說MySQL的服務(wù)會在操作間隔8小時(shí)后斷開,需要再次重連。也有用戶在URL中使用jdbc.url=jdbc:mysql://localhost:3306/nd?autoReconnect=true來使得連接自動恢復(fù),當(dāng)然了,這是可以的,不過是MySQL4及其以下版本適用。MySQL5中已經(jīng)無效了,必須調(diào)整系統(tǒng)變量來控制了。
MySQL5手冊中對兩個(gè)變量有如下的說明:
interactive_timeout:服務(wù)器關(guān)閉交互式連接前等待活動的秒數(shù)。交互式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項(xiàng)的客戶端。又見wait_timeout
wait_timeout:服務(wù)器關(guān)閉非交互連接之前等待活動的秒數(shù)。在線程啟動時(shí),根據(jù)全局wait_timeout值或全局interactive_timeout值初始化會話wait_timeout值,取決于客戶端類型(由mysql_real_connect()的連接選項(xiàng)CLIENT_INTERACTIVE定義),又見interactive_timeout
如此看來,兩個(gè)變量是共同控制的,那么都必須對他們進(jìn)行修改了。繼續(xù)深入這兩個(gè)變量wait_timeout的取值范圍是1-2147483(Windows),1-31536000(linux),interactive_time取值隨wait_timeout變動,它們的默認(rèn)值都是28800。
MySQL的系統(tǒng)變量由配置文件控制,當(dāng)配置文件中不配置時(shí),系統(tǒng)使用默認(rèn)值,這個(gè)28800就是默認(rèn)值。要修改就只能在配置文件里修改。打開/etc/my.cnf,打開后在如下位置添加兩個(gè)變量,賦值。(這里修改為388000)
保存退出,重啟mysql服務(wù),一定是重啟系統(tǒng)服務(wù)。便可看到修改結(jié)果:
圖3 修改配置
至此,修改完成,那么連接超時(shí)的問題從數(shù)據(jù)庫上就解決了。當(dāng)然在編程時(shí)也可以使用連接池設(shè)置超時(shí)時(shí)間,配置相對簡單。但修改數(shù)據(jù)庫更為本質(zhì)一些。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的wait_timeout【Mysql】解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql超经典的8小时问题-wait_
- 下一篇: Win10_MySQL环境搭建以及Nav