我有一个查询锁定表在MySQL(使用InnoDB):
UPDATE table SET status = 2 WHERE status = 3
这个查询导致了表上的死锁,不能绕过它。
I tried to do:
show processlist
然后杀死进程id但是我似乎不能杀死它
我试着:
kill 9588
9588为进程号。
然后我执行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;
Query参数指定我们需要终止查询命令进程。
kill进程的语法如下
KILL [CONNECTION | QUERY] processlist_id
您应该尝试先杀死计算机上的mysql/sql service
,然后再杀死您正在运行的程序。
希望它对你有用