程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 自動清理MYSQL的Lock進程的腳本

自動清理MYSQL的Lock進程的腳本

編輯:MySQL綜合教程


自動清理MYSQL的Lock進程的腳本   最近數據庫服務器在某一時段進程數忽然暴增,導致數據庫服務器死掉,根據日志查詢,是由於Mysql大量Lock進程造成服務器進程數過高導致。   遂寫了一個腳本,每分鐘檢查下,如果存在負載過高的情況,就殺掉一些Lock 進程。   以下腳本稍微改下,也可以完成其他的任務。   服務器負載高比較危險,可能會導致整個服務宕掉。雖然殺掉一些進程對某些用戶訪問可能會有一些異常,但總比服務器宕機要好。   cat killmysqlprocess.sh  -------------------------------------------------------------------------------------------------------------   www.2cto.com   #!/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 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   www.2cto.com   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
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved