Shell脚本自动杀死mysql睡眠进程

Vis*_*mal 13 mysql processlist

我们如何杀死mysql睡眠过程喜欢:

+------+-----------+-----------+------------------------+---------+------+----------------+-------------------------------------------------------------------------------------------+
| Id   | User      | Host      | db                     | Command | Time | State          | Info                                                                                      |
+------+-----------+-----------+------------------------+---------+------+----------------+-------------------------------------------------------------------------------------------+
| 2477 | stageuser | localhost | jj_production_11102013 | Query   |    0 | end            | SELECT * FROM wp_comments WHERE blog_id = 1071 ORDER BY comment_date_gmt DESC LIMIT 0, 50 |
| 3050 | stageuser | localhost | jj_production_11102013 | Query   |    0 | Sorting result | SELECT * FROM wp_comments WHERE blog_id = 1071 ORDER BY comment_date_gmt DESC LIMIT 0, 50 |
| 3052 | stageuser | localhost | jj_production_11102013 | Sleep   |  336 |                | NULL                                                                                      |
| 3056 | stageuser | localhost | NULL                   | Query   |    0 | NULL           | show processlist                                                                          |
| 3057 | stageuser | localhost | jj_production_11102013 | Sleep   |  301 |                | NULL                                                                                      |
| 3058 | stageuser | localhost | jj_production_11102013 | Sleep   |  299 |                | NULL                                                                                      |
| 3059 | stageuser | localhost | jj_production_11102013 | Sleep   |  298 |                | NULL                                                                                      |
| 3061 | stageuser | localhost | jj_production_11102013 | Sleep   |  273 |                | NULL                                                                                      |
| 3068 | stageuser | localhost | jj_production_11102013 | Sleep   |  251 |                | NULL                                                                                      |
| 3072 | stageuser | localhost | jj_production_11102013 | Sleep   |  233 |                | NULL                                                                                      |
| 3111 | stageuser | localhost | jj_production_11102013 | Sleep   |    1 |                | NULL                                                                                      |
+------+-----------+-----------+------------------------+---------+------+----------------+-------------------------------------------------------------------------------------------+
11 rows in set (0.00 sec)

此睡眠过程会影响网站性能,就像其他慢查询一样吗?

Vis*_*mal 11

我做到了.

创建kill_sleep.sh文件

mysql -u<user> -p<password> -h<host> -e "select concat('KILL ',id,';')  into outfile '/tmp/sleep_processes.txt' from information_schema.processlist where Command = 'Sleep'"
mysql -u<user> -p<password> -h<host> -e "source /tmp/sleep_processes.txt;"
rm -rf /tmp/sleep_processes.txt
Run Code Online (Sandbox Code Playgroud)

并将kill_sleep.sh设置为cron作业.

  • mysql -u -p -e "显示进程列表;" | grep 睡眠 | awk '{print $1}' | 在阅读 LINE 时;做 mysql -u -p -e "kill $LINE"; 完毕 (4认同)

Jha*_*nvi 5

语法是:

KILL thread_id
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

  mysql > KILL 3057
Run Code Online (Sandbox Code Playgroud)

但是为了删除所有的sleep进程,一个命令不能用,你需要遍历整个processlist,在取出tmp表中的所有进程并循环遍历它之后:

select concat('KILL ',id,';') from information_schema.processlist where Command='Sleep';

select concat('KILL ',id,';') from information_schema.processlist where Command='Sleep' into outfile '/tmp/a.txt';
Run Code Online (Sandbox Code Playgroud)

这里引用


Ben*_*ing 5

如果您在MySQL服务器上运行该命令,Vishal的答案很有效,但如果您远程连接到服务器或者您没有运行SOURCE或SELECT ... INTO OUTFILE(例如Amazon的RDS)的权限,它将无效.有可能重写它不依赖于这些功能,然后它可以在任何地方工作:

mysql -h<host> -u<user> -p -e "SELECT CONCAT('KILL ',id,';') FROM information_schema.processlist WHERE Command = 'Sleep'" > sleep.txt
cat sleep.txt | xargs -I% mysql -h<host> -u<user> -p -e "%"
Run Code Online (Sandbox Code Playgroud)