如何停止正在运行的MySQL查询?
我从Linux shell连接到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
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实例,则需要最后一次查询。