天天看點

連接配接mysql異常Communications link failure

連接配接mysql 資料庫的時候出現這個異常Communications link failure,原因:如果在wait_timeout秒期間内,資料庫連接配接(java.sql.Connection)一直處于等待狀态,mysql5就将該連接配接關閉。這時,你的Java應用的連接配接池仍然合法地持有該連接配接的引用。當用該連接配接來進行資料庫操作時,就碰到上述錯誤。

一般的mysql資料庫設定的wait_timeout時間都是8小時,(因為設定太長時間影響性能,因為改大會有傳回資訊延時的情況,和大量的SLEEP程序無法及時釋放的問題),是以還是得從用戶端這邊解決問題,

網上一般給出的解決辦法:

1.mysql5以前的版本可以直接在jdbc連接配接url的配置中附加上“autoReconnect=true”。

2.将mysql的全局變量wait_timeout的值修改為最大。檢視mysql5的手冊,發現windows和linux下wait_timeout的最大值分别是24天和365天。

(1).在檔案my.ini的最後增加一行:wait_timeout=1814400。(該檔案,windows下在mysql的安裝目錄下,linux下位置為/etc/my.ini)

(2).重新開機mysql。

還有說把ip改成localhost的,因為我連的資料庫不是我自己本地的,是以這種情況也就沒有嘗試

而且由于資料庫是第三方提供的,他們也不給改等待時間

是以隻好再想辦法。

我的方法就是每次連得時候都去校驗有效性,c3p0連接配接池配置加屬性

<property name="testConnectionOnCheckin"> 
                     <value>true</value> 
	</property> 
    <property name="idleConnectionTestPeriod"> 
                      <value>60</value> 
	</property> 
     <property name="testConnectionOnCheckout"> 
                      <value>true</value> 
	</property> 
    <property name="maxIdleTime"> 
                      <value>28000</value> 
    </property> 
           

這些屬性解析:

testConnectionOnCheckin:如果設為true那麼在取得連接配接的同時将校驗連接配接的有效性。預設為false。

idleConnectionTestPeriod: 連接配接池每隔60秒自動檢測資料庫連接配接情況,如果斷開則自動重連。

testConnectionOnCheckout: 因性能消耗大請隻在需要的時候使用它。如果設為true那麼在每個connection送出的時候都

将校驗其有效性。

maxIdleTime:最大空閑時間,超過空閑時間的連接配接将被丢棄。為0或負數則永不丢棄。預設為0;

這個肯定是要設定的<=wait_timeout 了