too many connections 解决方法
最近寫javaee項目的時候,mysql報了too many connections的錯誤,百度的內容有一些有問題,所以我重新寫一下我的解決方法。
mysql -u root -p 回車輸入密碼進入mysql?
這里寫圖片描述
show processlist;查看連接數,可以發現有很多連接處于sleep狀態,這些其實是暫時沒有用的,所以可以kill掉
show variables like "max_connections";查看最大連接數,應該是與上面查詢到的連接數相同,才會出現too many connections的情況
set GLOBAL max_connections=1000;修改最大連接數,但是這不是一勞永逸的方法,應該要讓它自動殺死那些sleep的進程。
show global variables like 'wait_timeout';這個數值指的是mysql在關閉一個非交互的連接之前要等待的秒數,默認是28800s
set global wait_timeout=300;修改這個數值,這里可以隨意,最好控制在幾分鐘內
這里寫圖片描述
set global interactive_timeout=500;修改這個數值,表示mysql在關閉一個連接之前要等待的秒數,至此可以讓mysql自動關閉那些沒用的連接,但要注意的是,正在使用的連接到了時間也會被關閉,因此這個時間值要合適
批量kill之前沒用的sleep連接,在網上搜索的方法對我都不奏效,因此只好使用最笨的辦法,一個一個kill
select concat('KILL ',id,';') from information_schema.processlist where user='root'; 先把要kill的連接id都查詢出來復制中間的kill id;內容到word文檔
替換掉符號“|”和回車符(在word中查詢^p即可查詢到回車符)
把修改過的內容復制回終端,最后按回車執行!
ERROR 1040: Too many connections問題解決辦法
?
出現此錯誤的原因,一種是訪問量確實很高,MySQL服務器頂不住,這個時候就要考慮增加從服務器分散讀壓力,另外一種情況是MySQL配置文件中max_connections值過小。
?
分析原因
mysql的默認連接上只有100,也就是說連接數據超過100 就會有可能出現 Too Many Connections
修改my.cnf配置文件添加并需要重啟:
[mysqld]wait_timeout = 600 interactive_timeout = 600查詢MySQL的最大連接數:
mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 100 | +-----------------+-------+ 1 row in set (0.00 sec)查詢MySQL響應的最大連接數:
mysql> show global status like 'max_used_connections'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | Max_used_connections | 5 | +----------------------+-------+ 1 row in set (0.00 sec)說明:本地環境沒什么參考價值,但是就上面的數據而言,MySQL過去所響應的最大連接數小于其允許的最大連接數,所以不會出現1040錯誤。
MySQL比較理想的最大連接數計算方式為:
即最大連接數占上限連接數的85%左右,如果發現比例在10%以下,MySQL服務器連接數上限設置的過高了。
問題找到解決辦法
?
1、mysql -u root -p 進入不了,同樣出現上述錯誤。
?
2、修改/etc/mysql/my.cnf(ubuntu系統,其他系統在/etc/my.cnf
[mysqld] port=3306 #socket=MySQL skip-locking set-variable = key_buffer=16K set-variable = max_allowed_packet=1M set-variable = thread_stack=64K set-variable = table_cache=4 set-variable = sort_buffer=64K set-variable = net_buffer_length=2K set-variable = max_connections=1000?
3、重啟
?
代碼如下 復制代碼
mysql /etc/init.d/mysql restart?
搞定了。
?
總結
?
MySQL服務器所支持的最大連接數是有上限的,因為每個連接的建立都會消耗內存,因此客戶端在連接到MySQL?Server處理完相應的操作后,應該斷開連接并釋放占用的內存。
如果MySQL?Server有大量的閑置連接,不僅會白白消耗內存,而且如果連接一直在累加而不斷開,最終肯定會達到MySQL?Server的連接上限數,這會報'too?many?connections'的錯誤。
對于wait_timeout的值設定,應該根據系統的運行情況來判斷。在系統運行一段時間后,可以通過show?processlist命令查看當前系統的連接狀態,如果發現有大量的sleep狀態的連接進程,則說明該參數設置的過大,可以進行適當的調整小些。
?
轉載于:https://www.cnblogs.com/luoahong/articles/9003446.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的too many connections 解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将腾讯元宝应用于金融行业?
- 下一篇: 抽取随即人员——SqlServer_Pr