如何停止正在运行的MySQL查询?

时间:2010-09-24 13:38:09

标签: mysql kill processlist

我从Linux shell连接到mysql。我不时地运行一个太大的SELECT查询。它打印和打印,我已经知道这不是我的意思。我想停止查询。

点击Ctrl+C(几次)完全杀死mysql并将我带回shell,所以我必须重新连接。

是否可以在不杀死mysql的情况下停止查询?

7 个答案:

答案 0 :(得分:417)

mysql>show processlist;

mysql> kill "number from first col";

答案 1 :(得分:64)

只是添加

KILL QUERY **Id** 其中Id是来自show processlist

的连接ID 如果您不希望在从某个应用程序运行时终止连接,则更优选

有关详细信息,请阅读mysql doc here

答案 2 :(得分:38)

连接到mysql

mysql -uusername -p  -hhostname

显示完整的流程清单:

mysql> show full processlist;
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| Id      | User   | Host              | db      | Command | Time | State | Info             |
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| 9255451 | logreg | dmin001.ops:37651 | logdata | Query   |    0 | NULL  | show processlist |
+---------+--------+-------------------+---------+---------+------+-------+------------------+

终止特定查询。这里id = 9255451

mysql> kill 9255451;

如果您获得权限被拒绝,请尝试以下SQL:

CALL mysql.rds_kill(9255451)

答案 3 :(得分:12)

使用mysqladmin来终止失控查询:

运行以下命令:

mysqladmin -uusername -ppassword pr

然后记下流程ID。

mysqladmin -uusername -ppassword kill pid

失控查询应该不再消耗资源。

答案 4 :(得分:9)

如果您有mysqladmin可用,则可以通过以下方式获取查询列表:

> mysqladmin -uUSERNAME -pPASSWORD pr

+-----+------+-----------------+--------+---------+------+--------------+------------------+
| Id  | User | Host            | db     | Command | Time | State        | Info             |
+-----+------+-----------------+--------+---------+------+--------------+------------------+
| 137 | beet | localhost:53535 | people | Query   | 292  | Sending data | DELETE FROM      |
| 145 | root | localhost:55745 |        | Query   | 0    |              | show processlist |
+-----+------+-----------------+--------+---------+------+--------------+------------------+

然后你可以停止托管长时间运行查询的mysql进程:

> mysqladmin -uUSERNAME -pPASSWORD kill 137

答案 5 :(得分:1)

您需要运行以下命令来终止该进程。

> show processlist;  
> kill query processId;

查询参数指定我们需要终止查询命令过程。

kill过程的语法如下

  

杀死[连接| QUERY] processlist_id

refer此链接以获取更多信息。

答案 6 :(得分:0)

这个问题的作者提到它通常只在之后 MySQL打印输出,他意识到执行了错误的查询。 如上所述,在这种情况下,Ctrl-C没有帮助。但是,我注意到了它 将中止当前查询 - 如果您在 任何输出之前捕获它 打印。例如:

mysql> select * from jos_users, jos_comprofiler;

MySQL忙于生成上述两个表的笛卡尔积 你很快就会注意到MySQL没有将任何输出打印到屏幕上(这个过程 state is 发送数据),因此您键入Ctrl-C

Ctrl-C -- sending "KILL QUERY 113240" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted

Ctrl-C可以类似地用于停止UPDATE查询。