[英]How to kill MySQL connections
我正在用 MySQL 建立一個網站。 我正在使用 TOAD for MySQL,突然我無法連接到數據庫,因為我收到錯誤:
“連接太多”
Toad for MySQL 中是否有任何方法可以查看現有連接以殺死它們或簡單地將所有連接全部關閉?
不,沒有內置的 MySQL 命令。 有各種支持它的工具和腳本,您可以手動終止一些連接或重新啟動服務器(但這會更慢)。
使用SHOW PROCESSLIST
查看所有連接,並KILL
要殺死的進程 ID。
您可以編輯超時設置,讓 MySQL 守護進程自行終止非活動進程,或增加連接計數。 您甚至可以限制每個 username 的連接數量,這樣如果進程一直行為不端,唯一受影響的進程就是進程本身,數據庫上的其他客戶端不會被鎖定。
如果您無法再連接到服務器,您應該知道 MySQL 始終為具有SUPER
權限的用戶保留 1 個額外連接。 除非您的違規過程出於某種原因使用具有該權限的用戶名...
然后在您可以再次訪問您的數據庫后,您應該修復產生那么多連接的進程(網站)。
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
雖然您無法使用單個命令終止所有打開的連接,但如果手動操作太多,您可以創建一組查詢來為您執行此操作。
本示例將創建一系列KILL <pid>;
查詢從192.168.1.1
到my_db
所有some_user
連接。
SELECT
CONCAT('KILL ', id, ';')
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE `User` = 'some_user'
AND `Host` = '192.168.1.1'
AND `db` = 'my_db';
我建議檢查連接以顯示最大線程連接是
show variables like "max_connections";
樣品
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 13 |
+-----------------+-------+
1 row in set
然后通過例子增加它
set global max_connections = 500;
如上所述,沒有特殊命令可以執行此操作。 但是,如果所有這些連接都處於非活動狀態,則使用“刷新表”; 能夠釋放所有未激活的連接。
在 MySQL 工作台中:
左側導航器 > 管理 > 客戶端連接
它為您提供了終止查詢和連接的選項。
注意:這不像 OP 所要求的那樣 TOAD,但像我這樣的 MySQL Workbench 用戶可能會在這里結束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.