我在 MySQL 中有一个查询锁定表(使用 InnoDB):
UPDATE table SET status = 2 WHERE status = 3
此查询导致表死锁,无法绕过。
我试着做:
show processlist
然后杀死进程ID,但我似乎无法杀死它
我试过了:
kill 9588
9588 是进程 ID。
然后我show processlist
仍然在列表中看到相同的查询。
如何强制终止此进程,然后为什么此查询会导致死锁?我该如何解决?
我在 MySQL 中有一个查询锁定表(使用 InnoDB):
UPDATE table SET status = 2 WHERE status = 3
此查询导致表死锁,无法绕过。
我试着做:
show processlist
然后杀死进程ID,但我似乎无法杀死它
我试过了:
kill 9588
9588 是进程 ID。
然后我show processlist
仍然在列表中看到相同的查询。
如何强制终止此进程,然后为什么此查询会导致死锁?我该如何解决?
当您在 RDS 上运行 MySQL 实例并出于某种原因想要终止线程或查询时,您会发现您无法使用KILL
或mysqladmin kill
因为您没有这样做的权限。
RDS 提供了命名的存储过程mysql.rds_kill
,mysql.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
该KILL
命令请求查询终止,并且该命令的状态应显示为Killed
。没有办法强制杀死某些东西并立即终止它。
作为最后的手段,您始终可以关闭并重新启动mysqld
服务器进程。
您需要运行以下命令来终止该进程。
> show processlist;
> kill query processId;
查询参数指定我们需要杀死查询命令进程。
kill 进程的语法如下
杀死 [连接 | QUERY] processlist_id
请参阅此链接以获取更多信息。
您应该先尝试杀死mysql/sql service
计算机上的程序,然后再通过托盘杀死您正在运行的程序,然后再进行白色查询。
希望它对你有用