錯(cuò)誤“Too many connections”。平常碰到這個(gè)問題,我基本上是修改/etc/my.cnf的max_connections參數(shù),然后重啟數(shù)據(jù)庫。但
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)宜黃,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
是生產(chǎn)服務(wù)器上數(shù)據(jù)庫又不能隨便重啟。
沒辦法,只好想辦法手動(dòng)去釋放一些沒用的連接。
登陸到MySQL的提示符下,數(shù)據(jù)show processlist這個(gè)命令,可以得到所以連接到這個(gè)服務(wù)器上的MySQL連接:
mysql show processlist;
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| 1180421 | ur | 202.103.96.68:49754 | test1 | Sleep | 1 | | NULL |
| 1180427 | ur | 202.103.96.68:55079 | test2 | Sleep | 1 | | NULL |
| 1180429 | ur | 202.103.96.68:55187 | testdba | Sleep | 0 | | NULL |
| 1180431 | ur | 202.103.96.68:55704 | testdba | Sleep | 0 | | NULL |
| 1180437 | ur | 202.103.96.68:32825 | test1 | Sleep | 1 | | NULL |
| 1180469 | ur | 202.103.96.68:58073 | testdba | Sleep | 0 | | NULL |
| 1180472 | ur | 83.136.93.131:47613 | test2 | Sleep | 8 | | NULL |
| 1180475 | root | localhost | NULL | Query | 0 | NULL | show PROCESSLIST |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
8 rows in set (0.00 sec)
mysql
然后,你可以看到像上面這樣的MySQL數(shù)據(jù)連接列表,而且每一個(gè)都會(huì)有一個(gè)進(jìn)程ID號(在上表的第一列)。我們只要輸入這樣的命令:
mysql kill 1180421;
Query OK, 0 rows affected (0.00 sec)
mysql
其中1180421為你在進(jìn)程列表里找到并且要?dú)⒌舻倪M(jìn)程號。
產(chǎn)生這種問題的原因是:
連接數(shù)超過了 MySQL 設(shè)置的值,與 max_connections 和 wait_timeout 都有關(guān)系。wait_timeout 的值越大,連接的空閑等待就越長,這樣就會(huì)造成當(dāng)前連接數(shù)越大。
解決方法:
修改MySQL配置文件/etc/my.cnf,設(shè)置成max_connections=1000,wait_timeout=5。如果沒有此項(xiàng)設(shè)置可以自行添加,修改后重啟MySQL服務(wù)即可。要不經(jīng)常性報(bào)此錯(cuò)誤,則要對服務(wù)器作整體性能優(yōu)化
注:
為了防止發(fā)生too many connections時(shí)候無法登錄的問題,mysql manual有如下的說明:
mysqld actually allows max_connections+1 clients to connect. The extra connection is reserved for use by accounts that have the SUPER privilege. By granting the SUPER privilege to administrators and not to normal users (who should not need it), an administrator can connect to the server and use SHOW PROCESSLIST to diagnose problems even if the maximum number of unprivileged clients are connected.
因此, 必須只賦予root用戶的SUPER權(quán)限,同時(shí)所有數(shù)據(jù)庫連接的帳戶不能賦予SUPER權(quán)限。前面說到的報(bào)錯(cuò)后無法登錄就是由于我們的應(yīng)用程序直接配置的root用戶
總結(jié),解決問題的最終方法:
1.修改配置文件/etc/my.cnf,調(diào)整連接參數(shù)
2.檢查程序代碼,對于沒有關(guān)閉的鏈接及時(shí)進(jìn)行關(guān)閉
不是要?jiǎng)h掉一些連接
而是要將最大連接數(shù)設(shè)置的小一些 起到保護(hù)后端服務(wù)器的作用
查看當(dāng)前最大連接數(shù):
show variables like '%max_connections%';
修改最大連接數(shù)應(yīng)該編輯 my.cnf 文件里面的 max_connections 值
改完之后需要重啟才能生效
連不上,報(bào)什么錯(cuò)誤?清除日期切換到/var/log/mysql.log下,直接rm -f 強(qiáng)制刪除