vi /usr/local/killmysqlprocess.sh
#!/bin/bash
#*/1 * * * * /usr/local/src/killmysqlprocess.sh
backdir="/usr/local/logs/"
logfile="cms_mysql_killprocess_$(date +"%Y%m%d").log"
mysqlbindir="/usr/local/mysql/bin/"
#use commond ‘vmstat‘ get proc num
vmstat > vmstat.tmp
pronum=`awk -F" " ‘{if (NR==3) print $1}‘ vmstat.tmp`
rm -f vmstat.tmp
#if pronum less 20, nothing to do.......... exit
if [ $pronum -lt 20 ]; then
exit
fi
#it‘s here more than 20,run kill mysql Lock process
${mysqlbindir}mysql -e "show full processlist" > processlist.tmp
#get Lock mysql process id
awk -F" " ‘/Locked/{print $1}‘ processlist.tmp >looplock.tmp
sleep 5
for line in `cat looplock.tmp`
do
/usr/local/mysql/bin/mysql -e "kill ${line}"
done
rm -f looplock.tmp
#write kill log
echo $(date +"%Y-%m-%d %H:%M:%S") >> ${backdir}${logfile}
cat processlist.tmp >> ${backdir}${logfile}
rm -f processlist.tmp
chmod 777 killmysqlprocess.sh
/usr/local/killmysqlprocess.sh
原文:http://www.cnblogs.com/littlehb/p/4513578.html
创建了一个shell脚本`killmysqlprocess.sh`,定时检查MySQL的进程列表,当检测到锁定状态的进程时,自动将其杀死。脚本首先通过`vmstat`获取进程数,然后使用`mysql`命令显示全量进程列表,找出被锁定的进程ID,并在5秒后执行`kill`命令进行清理。所有操作记录写入日志文件,确保过程可追溯。

120


被折叠的 条评论
为什么被折叠?



