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

如何停止正在运行的MySQL查询?,mysql,kill,processlist,Mysql,Kill,Processlist,我从Linux shell连接到mysql。我时不时地运行一个太大的SELECT查询。它不断地打印,我已经知道这不是我的意思。我想停止查询 点击Ctrl+C(几次)会完全杀死mysql,并将我带回shell,因此我必须重新连接 有没有可能在不杀死mysql本身的情况下停止查询?只需添加 mysql>show processlist; mysql> kill "number from first col"; KILL查询**Id** 其中Id是来自show processlist

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

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

有没有可能在不杀死mysql本身的情况下停止查询?

只需添加

mysql>show processlist;

mysql> kill "number from first col";
KILL查询**Id**
其中Id是来自
show processlist

如果您不想在通常从某个应用程序运行时终止连接,则更可取


有关更多详细信息,您可以阅读mysql文档

如果您有可用的
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

使用
mysqladmin
终止失控查询:

运行以下命令:

mysqladmin -uusername -ppassword pr
然后记下进程id

mysqladmin -uusername -ppassword kill pid

失控查询不应再占用资源。

连接到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 |
+---------+--------+-------------------+---------+---------+------+-------+------------------+
CALL mysql.rds_kill(9255451)
终止特定查询。此处id=9255451

mysql> kill 9255451;
如果您的权限被拒绝,请尝试以下SQL:

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

这个问题的作者提到,通常只有在 MySQL打印其输出,他意识到执行了错误的查询。 如前所述,在本例中,
Ctrl-C
没有帮助。然而,我注意到 将中止当前查询–如果在执行任何输出之前捕捉到它 印刷的。例如:

mysql> select * from jos_users, jos_comprofiler;
MySQL忙于生成上述两个表的笛卡尔积,并且 您很快就会注意到MySQL没有将任何输出打印到屏幕(进程) 州正在发送数据)因此您键入
Ctrl-C

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

Ctrl-C
同样可以用于停止
更新
查询。

您需要运行以下命令来终止进程。 找出要通过其终止的进程的id

> show processlist;
从id列中获取值并在下面激发命令

kill query <processId>;
kill查询;
查询参数指定我们需要终止查询命令进程

kill进程的语法如下

KILL[CONNECTION | QUERY]processlist_id


有关更多信息,请访问此链接。

Thanx,我只知道如何在phpmyadmin中执行此操作!但是mysql正在打印。。。我看不出promptI同意这种基本方法,但我认为在这种情况下,使用
KILL查询
比使用
KILL
稍微好一点。如果进程列表滚动超过缓冲区,一个有用的提示是设置寻呼机。只需在提示符处输入“\P more”。如果在AWS RDS上使用MySQL,您将无权运行
KILL
,但您可以运行:
CALL MySQL.RDS\u KILL(12345)
我提出了一个与此相关的问题,连接是否刚刚恢复,还是终止连接最终会导致池大小太小,应用程序无法运行?值得一提的是,MySQL 5.7支持服务器端SELECT语句超时。此处提供更多信息:注意:如果使用AWS RDS实例,则需要最后一次查询。