我正在使用MySQL构建一个网站。我正在使用TOAD for MySQL,突然间我无法连接到数据库,因为我收到错误:
“连接太多”
Toad for MySQL有没有办法查看现有连接以便能够杀死它们或简单地关闭所有连接?
答案 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用户可能会在这里结束