解決mysql自動(dòng)斷開連接的問題
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、連江網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、連江網(wǎng)絡(luò)營(yíng)銷、連江企業(yè)策劃、連江品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供連江建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
有三個(gè)方法可以解決這個(gè)問題:
1:修改MySQL配置參數(shù)
2:修改JDBC
3:修改第三方的數(shù)據(jù)庫(kù)連接池應(yīng)用 Proxool.xml
方法1的解決方案:
這個(gè)參數(shù)的名稱是 wait_timeout,其默認(rèn)值為 28800秒(8小時(shí))。其意義為關(guān)閉一個(gè)連接之前在這個(gè)連接上等到行動(dòng)的秒數(shù),也就是說,如果一個(gè)連接閑置超過這個(gè)選項(xiàng)所設(shè)置的秒數(shù),MySQL 會(huì)主動(dòng)斷開這個(gè)連接。
mysql交互輸入每次顯示終端連接已斷開是MySQL的默認(rèn)設(shè)置。當(dāng)一個(gè)連接的空閑時(shí)間超過8小時(shí)后,MySQL就會(huì)斷開該連接。超過這個(gè)時(shí)間(默認(rèn)是8小時(shí))對(duì)數(shù)據(jù)庫(kù)沒有任何操作,那么MySQL會(huì)自動(dòng)關(guān)閉數(shù)據(jù)庫(kù)連接以節(jié)省資源。
最近做的一個(gè)JavaWeb項(xiàng)目,持久層用SpringJDBC+DBCP+MySQL。一開始只配置了DBCP的一些常用參數(shù),沒有注意對(duì)空閑連接的檢查和回收。項(xiàng)目部署在tomcat后,剛開始使用沒用問題。第二天再試圖登錄時(shí),發(fā)生了報(bào)錯(cuò):
可以看到,報(bào)錯(cuò)信息提示上次交互已經(jīng)是82664635ms前,超過了MySQL server配置的'wait_timeout'(默認(rèn)是8小時(shí)),所以該連接已經(jīng)被MySQL回收了,但DBCP不知道連接已被回收,依然試圖執(zhí)行操作,引發(fā)了異常。報(bào)錯(cuò)信息提示可以修改wait_timeout或者添加autoReconnect=true。
(備注:mysql5以上的,設(shè)置autoReconnect=true 是無效的 只有4.x版本,起作用)
這兩個(gè)參數(shù)的默認(rèn)值是8小時(shí)(60 60 8=28800)。 注意:wait_timeout的最大值只允許2147483 (24天左右)
也可以用MySQL命令進(jìn)行修改
這種辦法治標(biāo)不治本。
2.減少連接池內(nèi)連接的生存周期,使之小于上一項(xiàng)中所設(shè)置的wait_timeout 的值。
也就是說,讓已經(jīng)斷開的空閑連接沒有機(jī)會(huì)被使用,提前被回收。
以C3P0配置為例:
DBCP中配置minEvictableIdleTimeMillis即可。
3.配置連接池
定期使用連接池內(nèi)的連接,使得它們不會(huì)因?yàn)殚e置超時(shí)而被 MySQL 斷開。并且每次使用連接前檢查連接是否可用,定期回收空閑的連接。
修改 c3p0 的配置文件,在 Spring 的配置文件中設(shè)置:
DBCP連接池的配置:
DBCP官方配置文檔:
C3P0的配置標(biāo)準(zhǔn):
關(guān)于MySQL的wait_timeout連接超時(shí)問題報(bào)錯(cuò)解決方案
解決辦法:1、檢查下出問題之前安裝的程序,2、重裝MYSQL!
你在計(jì)算機(jī)上右鍵屬性然后切換到高級(jí)選項(xiàng)卡之后選擇性能那里的設(shè)置,然后出來的窗口第三個(gè)選項(xiàng)是數(shù)據(jù)執(zhí)行保護(hù),你看下是不是勾選的除所選之外,為所有應(yīng)用程序和服務(wù)執(zhí)行數(shù)據(jù)保護(hù),如果是,就選擇只為關(guān)鍵Windows應(yīng)用程序執(zhí)行數(shù)據(jù)保護(hù),確定之后然后重啟電腦再看,估計(jì)是這里的問題,這個(gè)選項(xiàng)的選擇會(huì)導(dǎo)致很多兼容性的問題的,服務(wù)器操作系統(tǒng)主要是為了服務(wù)器而生,所以設(shè)置相比之下比桌面系統(tǒng)更加考慮的安全一點(diǎn),作為桌面系統(tǒng)來用需要優(yōu)化之后才適合。當(dāng)然如果作為服務(wù)器的話就建議不要去亂優(yōu)化成什么桌面系統(tǒng)了。
網(wǎng)絡(luò)的問題。mysql和mycat斷開連接是網(wǎng)絡(luò)連接異常導(dǎo)致。
1、首先打開電腦檢查網(wǎng)絡(luò)。
2、其次打開mysql進(jìn)行測(cè)試網(wǎng)絡(luò)連接是否異常。
3、最后點(diǎn)擊連接mycat重新進(jìn)入即可。
兩種常見的斷開方式:
1 根據(jù)數(shù)據(jù)庫(kù)連接字符串設(shè)置鏈接生命周期 會(huì)自行斷開
2 拿,net環(huán)境舉例 MySQL.Data.MySqlClient類庫(kù)下的 MySqlConnection類 下面有個(gè)方法 叫 .Close() 即可斷開連接;
訪問MySqlConnection類下的 Statu (只讀的)字段 可以獲得當(dāng)前連接狀態(tài)
提示 斷開后的連接 可以隨時(shí) 根據(jù)需要打開