MySQL報(bào)錯(cuò)“too many connections”通常是由于數(shù)據(jù)庫(kù)的最大連接數(shù)超過了MySQL配置的最大限制。這可能是由于數(shù)據(jù)庫(kù)的并發(fā)連接過多,或者存在一些連接沒有被正確關(guān)閉。這里給出一些可能的解決方案:
1、linux登錄mysql:
mysql -u root -p;
2、查看mysql允許的最大連接數(shù)
show variables like '%max_connections%';
3、查看這次mysql服務(wù)啟動(dòng)到現(xiàn)在,同一時(shí)刻最多mysql有多少連接
show status like 'Max_used_connections';
4、修改mysql最大連接數(shù)
set global max_connections=1000;
5、以上步驟修改后雖然能登錄,但仍有隱患,我們應(yīng)該把那些sleep的連接殺掉
(1)查看所有連接狀態(tài),會(huì)發(fā)現(xiàn)很多狀態(tài)是sleep的
show processlist ;
(2)修改wait_timeout
wait_timeout — 指的是mysql在關(guān)閉一個(gè)非交互的連接之前所要等待的秒數(shù)
如果你沒有修改過MySQL的配置,wait_timeout的初始值是28800
wait_timeout 過大有弊端,其體現(xiàn)就是MySQL里大量的SLEEP進(jìn)程無(wú)法及時(shí)釋放,拖累系統(tǒng)性能,不過也不能把這個(gè)指設(shè)置的過小,否則你可能會(huì)遭遇到“MySQL has gone away”之類的問題
set global wait_timeout=1000;
注意事項(xiàng):
在高并發(fā)場(chǎng)景下,可以考慮設(shè)置max_user_connections參數(shù)來(lái)限制單個(gè)用戶的最大連接數(shù)。
確保MySQL服務(wù)器的資源(如內(nèi)存、CPU)不是瓶頸,因?yàn)橘Y源不足也可能導(dǎo)致連接問題。
定期審查和調(diào)整數(shù)據(jù)庫(kù)的配置參數(shù),以適應(yīng)業(yè)務(wù)的發(fā)展和變化。