专业的编程技术博客社区

网站首页 > 博客文章 正文

MySQL Sleep进程处理(二)(mysqlkill进程)

baijin 2024-09-11 00:44:06 博客文章 5 ℃ 0 评论

上一篇文章讲到了通过修改系统参数配置,自动结束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进程烦恼了。

下期再见


如果你喜欢的话,请关注

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

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

欢迎大家留言

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表