資料庫的連線分成長連線(一直保持連線狀態)跟短連線(用完就關閉連線)這兩種,通常長連線不太會造成 Too many connections 連線數過多 的問題,反而是短連線常常因為程式錯誤而沒有正常的關閉資料庫連線而造成資料庫的連線一直增加,直到上線就會導致資料庫整個掛掉無法連線,資料庫本身就有預設的資料庫關閉的設定當某連線太久沒使用時會自動關閉,這這個設定的預設值過長 8 小時沒有使用才關閉,所以我們可以修改這個設定減少 連線數過多的問題產生。
查詢目前連線數語法:
show full processlist;
最大連線數查詢語法:
show variables like '%max_connections%';
顯示結果:
max_connections 151
設定最大連線數語法:
set GLOBAL max_connections = 200;
再次查詢最大連線數顯示結果
max_connections 200
此方式只要Mysql 有重新啟動後就會變回預設值 max_connections 151
一勞永逸的方法是直接在mysql 設定檔加設定 max_connections 這個參數
語法:
nano /etc/mysql/mysql.conf.d/mysqld.cnf
文件內文查詢 max_connections 參數語法:
Ctrl + w 輸入 max_connections
會看到預設的參數是被註解掉
#max_connections = 100
修改後
max_connections = 200
存檔
Ctrl + o
enter
離開
Ctrl + x
相關語法:
查詢系統歷史最大的使用者連線數
show global status like 'Max_used_connections';
以上的值如果遠低於 max_connections 就可以不用修改 max_connections 因為不是這個參數造成系統不穩。
連線過期時間
show variables like 'wait_timeout';
這個值設太高會造成連線數大伏增加 預設值是 28800 = 480m = 8hr
可參考這篇文章 https://www.webteach.tw/?p=2375
2022-12-09 補充 當主機的硬碟空間使用率超過95%以上一樣會出現連線數過多的錯誤訊息,此時請想辦法清出空間即可正常連線資料庫。