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