如何杀死MySQL连接

leo*_*ora 43 mysql connection

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

"太多联系"

在Toad for MySQL中是否有任何方法可以查看现有连接以便能够杀死它们或简单地关闭所有连接?

Kon*_*rak 78

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

使用SHOW PROCESSLIST查看所有连接,KILL要终止的进程的ID.

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

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

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


zlo*_*ctb 33

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)
Run Code Online (Sandbox Code Playgroud)

用户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
Run Code Online (Sandbox Code Playgroud)


Mob*_*uck 12

虽然您无法使用单个命令终止所有打开的连接,但如果手动操作太多,您可以创建一组查询来为您执行此操作。

此示例将为KILL <pid>;所有some_user192.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';
Run Code Online (Sandbox Code Playgroud)


小智 9

在 MySQL 工作台中:

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

它为您提供了终止查询和连接的选项。

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


zer*_*ro8 7

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

show variables like "max_connections";
Run Code Online (Sandbox Code Playgroud)

样品

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 13  |
+-----------------+-------+
1 row in set
Run Code Online (Sandbox Code Playgroud)

然后通过示例增加它

set global max_connections = 500;
Run Code Online (Sandbox Code Playgroud)


小智 5

如上所述,没有特殊命令可以执行此操作。但是,如果所有这些连接都处于非活动状态,则使用“刷新表”;能够释放所有未激活的连接。