如何杀死MySQL连接

时间:2011-02-08 11:34:38

标签: mysql connection

我正在使用MySQL构建一个网站。我正在使用TOAD for MySQL,突然间我无法连接到数据库,因为我收到错误:

  

“连接太多”

Toad for MySQL有没有办法查看现有连接以便能够杀死它们或简单地关闭所有连接?

6 个答案:

答案 0 :(得分:70)

不,有没有内置的MySQL命令。有各种支持它的工具和脚本,您可以手动终止某些连接或重新启动服务器(但这会更慢)。

使用SHOW PROCESSLIST查看所有连接,并使用KILL您要杀死的进程ID。

您可以编辑超时设置,让MySQL守护程序自行终止非活动进程,或者提高连接数。您甚至可以限制每个用户名的连接数,这样,如果流程一直存在行为不当,唯一受影响的流程就是流程本身,数据库中没有其他客户端被锁定。

如果您无法再将自己连接到服务器,您应该知道MySQL总是为具有 SUPER权限的用户预留1个额外连接。除非您的违规流程出于某种原因使用具有该权限的用户名...

然后,在您再次访问数据库之后,您应该修复产生许多连接的进程(网站)。

答案 1 :(得分:25)

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)

USER 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 :(得分:6)

我建议检查连接以显示最大线程连接

show variables like "max_connections";

样本

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

然后通过示例增加它

set global max_connections = 500;

答案 3 :(得分:4)

如上所述,没有特殊的命令可以做到这一点。但是,如果所有这些连接都处于非活动状态,则使用“刷新表”;能够释放所有那些不活跃的连接。

答案 4 :(得分:1)

虽然不能用单个命令杀死所有打开的连接,但是如果有太多手工要做,则可以创建一组查询来为您执行此操作。

此示例将为从KILL <pid>;some_user的所有192.168.1.1的连接创建一系列my_db查询。

SELECT 
CONCAT('KILL ', id, ';') 
FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE `User` = 'some_user' 
AND `Host` = '192.168.1.1';
AND `db` = 'my_db';

答案 5 :(得分:0)

在MySQL Workbench中:

左侧导航器>管理>客户端连接

它使您可以选择终止查询和连接。

注意:这不是OP要求的TOAD,但是像我这样的MySQL Workbench用户可能会在这里结束