問題描述
當前在做的一個項目中,採取前後臺完全分離的開發模式,各自分工來共同完成項目的正常運轉。在配置文件中設置了一個MySQL數據庫的最大連接數爲100,然後在測試時發現問題。只要多刷新幾次頁面,後臺就會報一個錯誤,錯誤信息爲:too many connections 直譯爲連接太多。出現這個問題後,就會自動退出登錄,導致項目無法正常運行。
解決方案
我自己尋找很久都沒有找到問題的原因,然後請求同事幫忙解決這個問題。直接原因是設置的MYSQL的連接數太小導致的,根本原因是使用的node的一個連接MySQL數據庫的包的方式存在問題,每次操作數據庫時都會創建一個新的連接,而且操作完成後沒有釋放連接進而出現問題,框架的設計者可能沒有考慮到這個問題才導致這樣的情況。
簡單的處理辦法爲執行下面一段sql:
select CONCAT('kill ',id,';'),INFO from information_schema.`PROCESSLIST` where time > 20 AND INFO IS NOT NULL;這個sql語句的作用是查詢執行時間大於20s的SQL語句進程ID,然後拷貝查詢結果,打開一個新的查詢窗口,殺掉這些進程即可。這種方法治標不治本,臨時解決即可。好的解決方案是更換MySQL數據庫操作的包爲阿里巴巴提供的ali-rds,這個包有一個好處,我們只需要負責增、刪、改、查的操作即可,操作完後它會自己釋放連接,這樣就很好的解決了前面遇到的問題。
總結歸納
從這裏學習到的新知識點是MySQL可以殺掉單個連接的進程,如果有需要可以隨時殺掉,一般只幹掉查詢的進程。操作MYSQL數據庫時,操作完成後一定要釋放資源,不釋放資源就會出現我上面的情況,導致哦mysql不能正常使用,並且性能降低。以前只是在學習MYSQL基礎理論時,老師這樣講解過,現在真實遇到了印象會更加的深刻!