Last modified:2013-10-08 14:16:47mysql
**********************************************web
web網站使用MySQL數據庫,今天忽然報如下錯誤:sql
Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was *** millisecond ago。數據庫
緣由:服務器
Mysql服務器默認的「wait_timeout」是8小時(也就是默認的值默認是28800秒),也就是說一個connection空閒超過8個小時,Mysql將自動斷開該connection,通俗的講就是一個鏈接在8小時內沒有活動,就會自動斷開該鏈接。而鏈接池卻認爲該鏈接仍是有效的(由於並未校驗鏈接的有效性),當應用申請使用該鏈接時,就會致使上面的報錯。網站
wait timeout的值能夠設定,但最多隻能是2147483,不能再大了。也就是約24.85天。this
修改方法:MySQL經過my.ini 在spa
# The TCP/IP Port the MySQL Server will listen on
port=3306下面添加
# this is myown dinifition for mysql connection timeout
wait_timeout=31536000
interactive_timeout=31536000.net
以上是在網上找到的解決方法,可是通常鏈接的有效時間不用修改,後來分析瞭如下問題,發現是因爲數據庫鏈接池的一句配置引起的:server
<!-- 最大空閒時間,60秒內未使用則鏈接被丟棄。若爲0則永不丟棄。Default: 0 -->
<property name="maxIdleTime" value="0"></property>
因爲mysql的鏈接空閒超過8個小時,因此就關閉了,可是鏈接池卻永不丟棄鏈接,認爲該鏈接仍是有效的(由於並未校驗鏈接的有效性),當應用申請使用該鏈接時,就會致使上面的報錯。
解決方法將value設置爲20。