自动清理mysql的lock进程的脚本_自动清理MySQL的Lock进程的脚本
自動清理MySQL的Lock進程的腳本
作者:小涵 | 來源:互聯網 | 2018-07-13 21:01
閱讀: 915
最近數據庫服務器在某一時段進程數忽然暴增,導致數據庫服務器死掉,根據日志查詢,是由于Mysql大量Lock進程造成服務器進程數過高導致。遂寫了一個腳本,每分鐘檢查下,如果存在負載過高的情況,就殺掉一些Lock進程。以下腳本稍微改下,也可以完成其他的任
最近數據庫服務器在某一時段進程數忽然暴增,導致數據庫服務器死掉,根據日志查詢,是由于Mysql大量Lock進程造成服務器進程數過高導致。 遂寫了一個腳本,每分鐘檢查下,如果存在負載過高的情況,就殺掉一些Lock 進程。 以下腳本稍微改下,也可以完成其他的任
最近數據庫服務器在某一時段進程數忽然暴增,導致數據庫服務器死掉,根據日志查詢,是由于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
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
吐了個 "CAO" !
吐個槽吧,看都看了
總結
以上是生活随笔為你收集整理的自动清理mysql的lock进程的脚本_自动清理MySQL的Lock进程的脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php启动 大量sess文件,关于PHP
- 下一篇: mysql jdbc 单利_java单利