散装或大规模杀戮MySQL查询行为exception

你如何杀死大量的MySQL查询? 这是一个好方法 :

mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='root' INTO OUTFILE '/tmp/a.txt'; mysql> source /tmp/a.txt; 

任何人除了在MySQLpipe理员graphics界面中点击他们死亡?

为了摆脱Percona对此的最好评价:

评论4:罗伯特Wultsch

我更喜欢以下内容,因为它会以multithreading方式杀死它们…(有时候,杀死一个查询可能需要一段时间)

(mysql -uroot -pPASS -e'show processlist'| grep'search_term'| awk'{print $ 1}'); 做

mysql -uroot -ppass -e“kill $ i”&

DONE

评论8:Shlomi Noach

一个INFORMATION_SCHEMA.PROCESSLIST存储过程有点详细的复制。

评论16:布莱恩

如果您的MySQL版本中不存在information_schema.processlist,那么这个工作在linux脚本中:

  #!/斌/庆典

对于`mysqladmin -u root -prootpwd processlist |中的每一个  AWK 
 '{print $ 2,$ 4,$ 8}'|  grep $ dbname |  grep $ dbuser |  awk'{print $ 1}';

做mysqladmin -u root -prootpwd kill $ each;

 DONE 

评论21:安德鲁沃森

我这样做:

mysqladmin proc | grep睡眠| sort -r -n -k6 | awk {'print $ 1; '} | xargs mysqladmin杀人

或者是这个效果


正如Dan C在回答这个问题时提到的那样 ,修剪SELECTS比杀死写入命令更安全,因为您可能会丢失数据完整性和/或外键。

另一种解决scheme是使用Digg描述的方法,即自动删减任何花费比分配的时间段更长的SELECT查询来完成。 一般来说,您只需要删除SELECT查询,因为它们是只读的,不应该影响应用程序的数据完整性。

你可以使用两个这样的工具来自动化这个工具 ,它们是dbmon.pl和mkill,它是一个名为mtop的包的一部分 。

我用它来杀死MySQL 5.5数据库服务器上的所有睡眠查询:

 mysql -e "show full processlist;" -ss | grep Sleep | awk '{print "KILL "$1";"}' | mysql 

最简单的就是把它们从壳里杀死,例如

 mysqladmin proc | grep Sleep | awk '{print $2}' | xargs -L1 mysqladmin kill 

如果仍有问题,请通过以下查询检查详细信息:

 mysql -e "SHOW engine innodb status\G" 

从MySQL中,尝试下面的代码根据@Shlomi发布的post ,可以使用服务器游标创build一个存储过程,例如:

 DELIMITER $$ DROP PROCEDURE IF EXISTS test.kill_user_queries$$ CREATE PROCEDURE test.kill_user_queries (kill_user_name VARCHAR(16) CHARSET utf8) SQL SECURITY INVOKER BEGIN DECLARE query_id INT; DECLARE iteration_complete INT DEFAULT 0; DECLARE select_cursor CURSOR FOR SELECT id FROM INFORMATION_SCHEMA.PROCESSLIST WHERE user=kill_user_name; DECLARE CONTINUE HANDLER FOR NOT FOUND SET iteration_complete=1; OPEN select_cursor; cursor_loop: LOOP FETCH select_cursor INTO query_id; IF iteration_complete THEN LEAVE cursor_loop; END IF; KILL QUERY query_id; END LOOP; CLOSE select_cursor; END$$ DELIMITER ; 

Google还有一个名为mypgrep.py的旧脚本。