龙空技术网

MySQL Sleep进程处理(二)

无止境的技术探索 98

前言:

现时咱们对“mysql很多sleep”大体比较珍视,兄弟们都需要了解一些“mysql很多sleep”的相关资讯。那么小编在网络上汇集了一些对于“mysql很多sleep””的相关文章,希望各位老铁们能喜欢,小伙伴们快快来了解一下吧!

上一篇文章讲到了通过修改系统参数配置,自动结束MySQL数据库中超时的Sleep的进程。本次将讲述如何通过编写Shell脚本结束Sleep进程。

第一步,连接数据库

第二步,查询sleep进程

第三步,过滤选择对应的进程

第四步,结束选中的进程

最后一步,部署脚本。

按照以上的步骤,对照脚本如下:

#It is used to kill processlist of mysql sleep# shell脚本:Kill掉MySQL中所有sleep的client线程# 0 */1 * * * sh ~/mysql_kill_sleep_process.sh#!/bin/sh n=`mysqladmin processlist -uxxxx -pxxxx -hxx.xx.xx.xx1 |grep -i sleep | grep xx.xx.xx.xx2 | grep connect_user |wc -l` date=`date +%Y%m%d\[%H:%M:%S]` echo $n if [ "$n" -gt 5 ] then  for i in `mysqladmin processlist -uxxx -pxxxxx -hxx.xx.xx.xx1 |grep -i sleep | grep xx.xx.xx.xx2 | grep bi_editer |awk '{print $2}'`  do  mysqladmin -uxxx -pxxx -hxx.xx.xx.xx1 kill $i echo "xxxx $i was killed!" >> ./sleep.log  done  echo "sleep is too many I killed it " >> ./sleep.log  echo "$date : $n" >> ./sleep.log fi

不知道大家看了脚本还会不会继续读下去,相信大家一定能看懂,不过还是简单解释脚本的功能

脚本介绍

脚本中xx.xx.xx.xx1代表MySQL服务器地址,xx.xx.xx.xx2代表客户端地址

grep xx.xx.xx.xx2 筛选客户端

grep connect_user 筛选连接用户

脚本中增加了sleep进程的数量判断,当数量达到一定阈值时,采取结束进程的动作,否则不会,避免频繁的操作后台,对数据库以及服务器造成影响。

调度配置

在程序的第三行

# 0 */1 * * * sh ~/mysql_kill_sleep_process.sh #每个整点(每隔一个小时)执行一次

相信大家也很熟悉吧,对,这就是Linux的定时任务。当我们写完脚本,就需要考虑如何去执行它。我选择了配置定时任务的方式:crontab。使用crontab的方式很简单。在用户home目录下创建一个cron.xxx (xxx最好是用户名), 将以上配置写入(去掉#),然后执行 crontab cron.xxx,定时任务就配置成功了。

至此,shell脚本会每隔一个小时执行一次,再也不用为大堆的sleep进程烦恼了。

下期再见

如果你喜欢的话,请关注

如果你觉得是干货,请收藏

如果你觉得值得分享,请转发

欢迎大家留言

标签: #mysql很多sleep