批量 Kill mysql processlist 進程
如果大批量的操作能夠通過一系列的select 語句產生,那么理論上就能對這些結果批量處理。
但是mysql並沒有提供eval這樣的對結果集進行分析操作的功能。索引只能將select結果保存到臨時文件中,然后再執行臨時文件中的指令。
具體過程如下
1、通過information_schema.processlist表中的連接信息生成需要處理掉的MySQL連接的語句臨時文件,然后執行臨時文件中生成的指令
mysql> select concat('KILL ',id,';') from information_schema.processlist where user='root'; +------------------------+ | concat('KILL ',id,';') +------------------------+ | KILL 3101; | KILL 2946; +------------------------+ 2 rows in set (0.00 sec) mysql>select concat('KILL ',id,';') from information_schema.processlist where user='root' into outfile '/tmp/a.txt'; Query OK, 2 rows affected (0.00 sec) mysql>source /tmp/a.txt; Query OK, 0 rows affected (0.00 sec)
2、殺掉當前所有的MySQL連接
mysqladmin -uroot -p processlist|awk -F "|" '{print $2}'|xargs -n 1 mysqladmin -uroot -p kill
殺掉指定用戶運行的連接,這里為sa
mysqladmin -uroot -p processlist|awk -F "|" '{if($3 == "sa")print $2}'|xargs -n 1 mysqladmin -uroot -p kill
3、通過shell腳本實現
#殺掉鎖定的MySQL連接 for id in `mysqladmin processlist|grep -i locked|awk '{print $1}'` do mysqladmin kill ${id} done