Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映。这个时候,就需要kill掉某个正在消耗资源的query语句即可,KILL命令的语法格式如下:
KILL[CONNECTION|QUERY]thread_id
每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOWPROCESSLIST语句查看哪些线程正在运行,并使用KILLthread_id语句终止一个线程。
KILL允许自选的CONNECTION或QUERY修改符:KILLCONNECTION与不含修改符的KILL一样:它会终止与给定的thread_id有关的连接。KILLQUERY会终止连接当前正在执行的语句,但是会保持连接的原状。
如果您拥有PROCESS权限,则您可以查看所有线程。如果您拥有超级管理员权限,您可以终止所有线程和语句。否则,您只能查看和终止您自己的线程和语句。您也可以使用mysqladminprocesslist和mysqladminkill命令来检查和终止线程。
首先登录MySQL,然后使用:showprocesslist;查看当前mysql中各个线程状态。
mysql>showprocesslist; +------+------+----------------------+----------------+---------+-------+-----------+--------------------- |Id|User|Host|db|Command|Time|State|Info +------+------+----------------------+----------------+---------+-------+-----------+--------------------- |7028|root|ucap-devgroup:53396|platform|Sleep|19553||NULL |8352|root|ucap-devgroup:54794|platform|Sleep|4245||NULL |8353|root|ucap-devgroup:54795|platform|Sleep|3||NULL |8358|root|ucap-devgroup:62605|platform|query|4156|updating|updatet_shopset|
以上显示出当前正在执行的sql语句列表,找到消耗资源最大的那条语句对应的id.
然后运行kill命令,命令格式如下:
killid; -示例: kill8358
杀掉即可。