mysql資料庫連線異常問題(總結) mysql資料庫連線異常問題(總結)
mysql資料庫連線異常問題(總結)
1.1 前言
最近專案由1個數據源增加至了3個數據源(連線池使用C3P0),結果各種奇葩的資料庫連線問題接踵而至,為防止將來再次遇到同樣的問題不犯同樣錯誤,現總結如下。
1.2 An attempt by a client to checkout a Connection has timed out (連線超時)
- 這種情況基本是網路不穩定導致的;再者就是資料來源配置引數有異常。
1.3 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 52,420,576 milliseconds ago.
- 這種情況是由於連線池產生的部分連線長時間閒置,已經超過mysql資料庫配置的“wait_timeout”設定的超時即斷開該連線,而連線池沒有校驗該連線是否可用就直接被服務呼叫了,導致連線不可用報錯。解決方案如下:
a、修改C3P0配置引數(推薦):
c3p0.testConnectionOnCheckout=true
b、縮減連線池的連線的生命週期,一般比資料庫的等待超時預設8小時內即可(推薦);
c、增加資料庫的等待超時配置為24小時(不推薦);
1.4 cannot get a available connection
- 這種情況基本是要檢查連線池的初始化連線數及最大連線數不夠的問題,需要調大點;再者就是資料庫可能出了問題。
1.1 前言
最近專案由1個數據源增加至了3個數據源(連線池使用C3P0),結果各種奇葩的資料庫連線問題接踵而至,為防止將來再次遇到同樣的問題不犯同樣錯誤,現總結如下。
1.2 An attempt by a client to checkout a Connection has timed out (連線超時)
- 這種情況基本是網路不穩定導致的;再者就是資料來源配置引數有異常。
1.3 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 52,420,576 milliseconds ago.
- 這種情況是由於連線池產生的部分連線長時間閒置,已經超過mysql資料庫配置的“wait_timeout”設定的超時即斷開該連線,而連線池沒有校驗該連線是否可用就直接被服務呼叫了,導致連線不可用報錯。解決方案如下:
a、修改C3P0配置引數(推薦):
c3p0.testConnectionOnCheckout=true
b、縮減連線池的連線的生命週期,一般比資料庫的等待超時預設8小時內即可(推薦);
c、增加資料庫的等待超時配置為24小時(不推薦);
1.4 cannot get a available connection
- 這種情況基本是要檢查連線池的初始化連線數及最大連線數不夠的問題,需要調大點;再者就是資料庫可能出了問題。