自动清理MYSQL 的Lock 进程的脚本
2012-09-05 15:54
453 查看
最近数据库服务器在某一时段进程数忽然暴增,导致数据库服务器死掉,根据日志查询,是由于Mysql大量Lock进程造成服务器进程数过高导致。
遂写了一个脚本,每分钟检查下,如果存在负载过高的情况,就杀掉一些Lock 进程。
以下脚本稍微改下,也可以完成其他的任务。
服务器负载高比较危险,可能会导致整个服务宕掉。虽然杀掉一些进程对某些用户访问可能会有一些异常,但总比服务器宕机要好。
cat 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
pronum=`vmstat | awk -F" " '{if (NR==3) print $1}' vmstat.tmp`
#if pronum less 5, nothing to do.......... exit
if [ $pronum -lt 5 ]; then
exit
fi
#it's here more than 5,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
遂写了一个脚本,每分钟检查下,如果存在负载过高的情况,就杀掉一些Lock 进程。
以下脚本稍微改下,也可以完成其他的任务。
服务器负载高比较危险,可能会导致整个服务宕掉。虽然杀掉一些进程对某些用户访问可能会有一些异常,但总比服务器宕机要好。
cat 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
pronum=`vmstat | awk -F" " '{if (NR==3) print $1}' vmstat.tmp`
#if pronum less 5, nothing to do.......... exit
if [ $pronum -lt 5 ]; then
exit
fi
#it's here more than 5,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
相关文章推荐
- Win平台MySQL自动备份脚本,实现自动清理
- mysql 杀掉(kill) lock进程脚本
- Shell脚本自动备份MySQL到FTP并定期清理过期备份
- Shell脚本自动备份MySQL到FTP并定期清理过期备份
- MySQL binlog 自动清理脚本
- MYSQL自动备份脚本
- mysql最新通用二进制分发版本5.7.16自动安装shell脚本
- windows进程清理脚本
- Linux Shell 脚本 自动备份 Mysql 数据库
- Memcached进程挂掉自动重启脚本
- 一个Mysql自动备份脚本
- mysql 非安装版的一个自动安装脚本及工具(更新版)
- EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
- shell脚本自动清理服务器日志、图片等信息
- keepalive之mysql故障自动切换脚本
- 更新"MySQL复制 自动监控脚本"
- 实战:XtraBackup for mysql 5.6自动还原脚本
- mysql自动备份、恢复脚本(linux的shell、windows的批处理)
- Windows下MySQL自动备份的batch脚本
- 【BASH】自动清理rman备份文件的脚本