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

Posted

技术标签:

【中文标题】如何停止正在运行的 MySQL 查询?【英文标题】:How can I stop a running MySQL query? 【发布时间】:2011-04-16 19:17:08 【问题描述】:

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

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

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

【问题讨论】:

值得一提的是,MySQL 5.7 支持服务端 SELECT 语句超时。更多信息在这里:mysqlserverteam.com/server-side-select-statement-timeouts 【参考方案1】:
mysql>show processlist;

mysql> kill "number from first col";

【讨论】:

但是mysql 正在打印...我看不到提示 我同意这种基本方法,但我认为在这种情况下使用KILL QUERYKILL 更可取。这样查询就会被终止,但连接不会。 如果您的进程列表滚动到缓冲区之外,一个有用的提示是设置寻呼机。只需在提示符处输入'\P more'。在此处查看有关此提示的更多信息dbasquare.com/2012/03/28/… @Zilverdistel 在 phpMyAdmin 中是如何做到的? 如果在 AWS RDS 上使用 MySQL,您将无权运行 KILL,但您可以运行:CALL mysql.rds_kill(12345)【参考方案2】:

只是添加

KILL QUERY **Id** 其中Id是来自show processlist的连接ID

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

更多细节可以阅读mysql文档here

【讨论】:

我有一个与此相关的问题,连接是刚刚重新生成,还是终止连接最终会导致池大小太小而无法运行应用程序?【参考方案3】:

连接到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)

【讨论】:

注意:如果使用 AWS RDS 实例,则需要最后一次查询。【参考方案4】:

使用mysqladmin 杀死失控查询:

运行以下命令:

mysqladmin -uusername -ppassword pr

然后记下进程id。

mysqladmin -uusername -ppassword kill pid

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

您需要运行以下命令来终止该进程。 找出你想杀死的进程的ID

> show processlist;

从 id 列中获取值并在命令下方触发

kill query <processId>;

查询参数指定我们需要杀死查询命令进程。

kill进程的语法如下

杀死 [连接 | QUERY] processlist_id

请refer此链接了解更多信息。

【讨论】:

【参考方案7】:

这个问题的作者提到它通常只是在 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 可以类似地用于停止UPDATE 查询。

【讨论】:

以上是关于如何停止正在运行的 MySQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何停止 MySQL 中正在运行的过程?

如何查看navicat for mysql是不是激活

在Navicat上如何停止正在运行的MYSQL语句

使用 mysqld_safe 运行 MySQL 后如何停止它?

使用 mysqld_safe 运行 MySQL 后如何停止它?

如何停止长时间运行的 BigQuery 作业?