2011-02-08 134 views
19

我正在用MySQL建立一個網站。我用蟾蜍爲MySQL和突然,因爲我得到一個錯誤,我無法連接到數據庫:如何殺死MySQL連接

"Too many connections"

有沒有辦法在蟾蜍爲MySQL,查看現有的連接,能夠殺了他們或簡單關閉所有連接在一起?

+1

如果您的連接用完了,您可能在網站上做了錯誤的事情,比如沒有正確關閉連接。 – jishi 2011-02-08 12:37:30

回答

51

沒有,是沒有內置的MySQL命令了點。有各種支持它的工具和腳本,您可以手動刪除一些連接或重新啓動服務器(但速度會更慢)。

使用SHOW PROCESSLIST查看所有連接,並且KILL您想要殺死的進程ID。

你可以通過修改超時設置有MySQL守護進程殺掉不活動的過程本身,或提高連接數。你甚至可以限制每個用戶名連接的數量,因此,如果過程保持行爲不端,唯一受影響的過程是過程本身並在數據庫中沒有其他客戶會被鎖定。

如果您不能再連接到服務器,您應該知道MySQL始終爲具有SUPER特權的用戶保留一個額外的連接。除非你的問題的進程是對於用於產卵,許多連接某種原因,使用用戶名與特權......

然後之後就可以再次訪問你的數據庫,你應該修復過程(網站)。

+1

請注意,限制每個用戶名在5.0.3上引入,所以如果你運行4.1或類似的東西,你運氣不好。 – jishi 2011-02-08 12:36:39

4

如上所述,沒有特殊的命令去做。但是,如果所有這些連接都處於非活動狀態,請使用「沖刷表」;能夠釋放所有不活動的連接。

16
mysql> SHOW PROCESSLIST; 
+-----+------+-----------------+------+---------+------+-------+---------------+ 
| Id | User | Host   | db | Command | Time | State | Info  | 
+-----+------+-----------------+------+---------+------+-------+----------------+ 
| 143 | root | localhost:61179 | cds | Query | 0 | init | SHOW PROCESSLIST | 
| 192 | root | localhost:53793 | cds | Sleep | 4 |  | NULL  | 
+-----+------+-----------------+------+---------+------+-------+----------------+ 
2 rows in set (0.00 sec) 

mysql> KILL 192; 
Query OK, 0 rows affected (0.00 sec) 

者192:

mysql> SELECT * FROM exept; 
+----+ 
| id | 
+----+ 
| 1 | 
+----+ 
1 row in set (0.00 sec) 

mysql> SELECT * FROM exept; 
ERROR 2013 (HY000): Lost connection to MySQL server during query 
2

我會建議您檢查連接到顯示最大螺紋連接

show variables like "max_connections"; 

樣品

+-----------------+-------+ 
| Variable_name | Value | 
+-----------------+-------+ 
| max_connections | 13 | 
+-----------------+-------+ 
1 row in set 

然後通過示例增加它

set global max_connections = 500; 
+0

酷,非常感謝, – 2017-08-05 07:25:40