公司乙個專案使用了druid連線池,mysql資料庫,生產環境日誌偶爾會列印乙個錯誤如下:
com.mysql.jdbc.exceptions.jdbc4.communication***ception: communications link failure。
查了下,錯誤挺常見,出現這個錯誤的原因:
1.網路錯誤,導致資料庫無法連線。
2.資料庫連線閒置時間太長,導致資料庫關閉了連線,而連線池還持有這個連線的引用,所以導致使用這個連線的時候出現了異常。
針對第二個問題,具體分析一下。
在我們的程式中,對資料庫發起建立連線的請求,連線由資料庫建立,而我們持有的是連線的引用;當使用連線池時,連線池會初始化一批連線,但是當我們的程式空閒時間太長時,資料庫會主動根據設定的超時時間(mysql預設連線超時時間為8小時)斷開連線,但是這個操作連線池並不知道,所以這個時候就需要連線池有乙個心跳機制去檢測連線池中的連線是否有效,在druid中,可以通過設定testwhileidle=true(預設為true)來開啟。
在mysql中檢視超時時間的命令為: show global variables like '%timeout%'
修改mysql超時時間語句為: set global wait_timeout=10000
1.改大mysql連線超時時間。
a、修改配置
如果在window中設定為21天,改mysql5的安裝資料夾中的my.ini
如果在linux中/etc/my.cnf,新增一行:wait_timeout = 1814400,重啟mysql,新增效果如下:
b、直接用sql命令列修改(重啟有還原為28800,不推薦)
mysql> set global wait_timeout=1814400;
mysql> show global variables like 'wait_timeout';
2.如果使用了druid連線池,可以配置連線池的testonborrow=true,這樣在每次從連線池中取出且準備使用之前先測試下當前使用是否能用,如果不能用,系統就會自動刪除掉。 但是這樣會大大的降低程式的效能。 MySQL連線超時
1.無論是my.ini還是my.cnf,在 mysqld 下面有兩個配置項 wait timeout 28800 interactive timeout 28800 預設值都是28800秒.乙個連線,預設持續時間是wait timemout,如果連線中mysql real connect引數採用了c...
MySQL連線超時
在負載較重的mysql伺服器上,有時你偶爾會看到一些連線超時的錯誤,諸如 can t connect to mysql server on mydb 110 如果當時你有多個連線請求,你會發現其它連線卻沒問題。這類問題開始時很不顯眼,且長時間來看幾乎可以忽略不計 注 次數不 多 類似於百萬分之一的發...
druid資料庫連線池 連線超時問題
在druid配置中新增連線超時 機制 jdbc url jdbc mysql username root password x5 driverclassname com.mysql.jdbc.driver 下面為連線池的補充設定,應用到上面所有資料來源中 初始化大小,最小,最大 initialsiz...