9

我在 MySQL 中有一个查询锁定表(使用 InnoDB):

UPDATE table SET status = 2 WHERE status = 3

此查询导致表死锁,无法绕过。

我试着做:

show processlist

然后杀死进程ID,但我似乎无法杀死它

我试过了:

kill 9588

9588 是进程 ID。

然后我show processlist仍然在列表中看到相同的查询。

如何强制终止此进程,然后为什么此查询会导致死锁?我该如何解决?

4

4 回答 4

25

当您在 RDS 上运行 MySQL 实例并出于某种原因想要终止线程或查询时,您会发现您无法使用KILLmysqladmin kill因为您没有这样做的权限。

RDS 提供了命名的存储过程mysql.rds_killmysql.rds_kill_query它们将分别杀死一个线程和一个查询。要杀死一个线程,首先使用SHOW PROCESSLIST获取线程列表并找到要杀死的线程的id。假设线程 id 是 53512,那么使用

CALL mysql.rds_kill(53512)

资料来源: http ://snak.tumblr.com/post/13856391340/killing-a-thread-or-query-of-mysql-running-on-rds

于 2014-10-30T17:24:11.413 回答
5

KILL命令请求查询终止,并且该命令的状态应显示为Killed。没有办法强制杀死某些东西并立即终止它。

作为最后的手段,您始终可以关闭并重新启动mysqld服务器进程。

于 2013-04-10T17:07:05.527 回答
4

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

> show processlist;  
> kill query processId;

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

kill 进程的语法如下

杀死 [连接 | QUERY] processlist_id

参阅此链接以获取更多信息。

于 2019-01-04T08:40:53.920 回答
1

您应该先尝试杀死mysql/sql service计算机上的程序,然后再通过托盘杀死您正在运行的程序,然后再进行白色查询。

希望它对你有用

于 2013-04-10T17:15:23.970 回答