MySQL慢日志監控腳本實例剖析

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1577326

       公司線上的 MySQL 慢日志,之前一直沒有做好監控。趁著上周空閑,我就把監控腳本寫了下,今天特地把代碼發出來與51博友分享一下。

       針對腳本的注解和整體構思,我會放到腳本之后為大家詳解。

#!/bin/bash
#
# 本腳本用來在指定頻率內監控 MySQL 慢日志的變化,并在發生增長時及時報警
# Written by sunsky
# Mail : 274546888@qq.com
# Date : 2014-11-17 10:00:00
#
  
MON_FILE="$2"   # 指定所要監控的腳本路徑
SEC=60          # 指定所要監控的頻率,即間隔多久去查看一次
MON_POINT_FILE=/tmp/mon_mysql_slow.point  # 指定MySQL慢日志的監控點存放的路徑
DIFF_MON_FILE=/tmp/mon_mysql_slow.log     # 指定在監控頻率內增加的MySQL慢日志信息存放路徑
ADMIN_MAIL=274546888@qq.com               # 指定發送給哪個管理員
 
function USAGE {
    echo -e "33[31m腳本名稱: 33[37m"
    echo "    $0"
    echo -e "33[31m語法結構: 33[37m"
    echo "    $0 {start|stop|restart} MySQL慢日志文件路徑"
    echo -e "33[31m使用范例: 33[37m"
    echo "    $0 start /usr/local/mysql/log/mysql_slow.log"
    echo "    $0 stop"
    echo "    $0 restart /usr/local/mysql/log/mysql_slow.log"
    echo -e "33[31m注意事項: 33[37m"
    echo "    1. 除了stop操作,start和restart操作時,\$2 參數不能為空"
    echo "    2. \$2 參數指定的文件必須存在"
    exit 2
}
 
function start {
    echo "MySQL慢日志監控進程已經啟動,監控文件為 $MON_FILE ,監控頻率為 ${SEC}s一次."
    while :
    do
        [ -f $MON_POINT_FILE ] || echo 0 > $MON_POINT_FILE
        NEW_POINT=$(awk 'END{print NR}' $MON_FILE)
        OLD_POINT=$(<$MON_POINT_FILE)
        [[ -z $OLD_POINT ]]&&OLD_POINT=0
        SUM_POINT0=$(($NEW_POINT-$OLD_POINT))
        SUM_POINT=${SUM_POINT0#-}
        sed -n "$OLD_POINT,${NEW_POINT}p" $MON_FILE > $DIFF_MON_FILE
        if [[ -s $DIFF_MON_FILE ]];then
            sed -i '1i 本次新增慢日志 '$SUM_POINT' 條'  $DIFF_MON_FILE
            mail -s "[警告] 服務器 $(hostname) 產生 MySQL 慢日志 $SUM_POINT 條" $ADMIN_MAIL < $DIFF_MON_FILE
            > $DIFF_MON_FILE
            echo $NEW_POINT > $MON_POINT_FILE
        fi
        sleep ${SEC}s
    done
}
 
function stop {
        if [[ -n `ps -ef|awk '$0~"mon_mysql_slow_log.sh"{print $2}'` ]];
            then
                for PID in `ps -ef|awk '$0~"mon_mysql_slow_log.sh"{print $2}'`;
                       do
                           [[ $PID != $$ ]] && kill -9 $PID >& /dev/null
                       done
            else
                echo '目前暫無MySQL慢日志監控進程'
                exit 0
        fi
        echo 'MySQL慢日志監控進程已經停止運行'
}
 
function restart {
        stop
        start &
}
 
if [[ $1 == stop ]]
    then
        :
    else
        [[ $2 < 3 ]] && USAGE
        [[ ! -f $2 ]] && USAGE
fi
 
case $1 in
    start)
        start &
        ;;
    stop)
        stop
        ;;
    restart)
        MON_FILE=$2
        restart
        ;;
    *)
        USAGE
        ;;
esac

      OK!

       以上就是腳本的全部內容。整個腳本由四個主函數構成。針對每個函數的作用,我這里做下介紹:

USAGE   # 該函數負責提示用戶如何正確使用該腳本
start   # 該函數負責啟動腳本
stop    # 該函數負責停止監控腳本
restart # 該函數負責重啟監控腳本

       下面附上腳本的使用效果圖:

1.jpg

      腳本的整個思路就是,通過while :;do statement;done啟一個死循環,然后在死循環里面通過 sleep 來控制死循環的循環間隔。在指定的循環間隔內,通過取MySQL慢日志的長度作為一個記錄點,然后在下一個循環到來時,通過比對上一個記錄點來得出,日志是否有變化。如果有變化,就通過計算記錄點的差值來得出增長值。通過增長值來獲取到增長的這部分日志,然后通過mail發送到指定的管理員郵箱。

      這里展示下發送出來的郵件:

2.jpg

      OK!其它的一看就懂,這里就不廢話了。

      本文到此結束,希望能對51博友有所幫助!

轉自:http://nolinux.blog.51cto.com/4824967/1577326

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/1940

(0)
s19930811s19930811
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • Linux-start

    學習計劃:參見N24學習時間與線路圖. 目標:完成作業,考試過關。 宣言:人但有追求,世界亦會讓路。

    Linux干貨 2016-10-24
  • linux基礎入門之二

    linux基礎入門之二 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 1.cp文件復制: 常用選項: -i:交互式復制,即覆蓋之前提醒用戶確認; -f:強制覆蓋目標文件; -r, -R:遞歸復制目錄; -d:復制符號鏈接文件本身,而非其指向的源文件; -a:-dR –…

    Linux干貨 2016-09-26
  • Nginx 原理

    Web服務器處理并發連接請求的工作模型有以下幾種方式: 1、單線程web服務器(Single-threaded web servers)此種架構方式中,web服務器一次處理一個請求,結束后讀取并處理下一個請求。在某請求處理過程中,其它所有的請求將被忽略,因此,在并發請求較多的場景中將會出現嚴重的性能問題。(即一次只能處理一個請求) 2、多進程/多線…

    Linux干貨 2017-05-07
  • shuc之學習目標

    1,每天學習二小時 2,半年熟悉數據中心LINUX技術

    Linux干貨 2016-10-23
  • bind-9.9.5編譯安裝

    bind-9.9.5編譯安裝 §·bind-9.9.5編譯安裝大概步驟 步驟一 :下載源碼包bind-9.9.5 ; 步驟二 :按需求選擇模塊或功能 ./configure ;  # ./configure  –prefix=/usr/local/bind9  –sysconfdir=…

    Linux干貨 2016-10-09
  • centos啟動模式更改

    臨時更改   用單用戶的方法 系統開機 然后在等待界面是按esc 然后會進入這個界面,根據下面的提示進入 按a 會進入下面這個界面 在最后一行輸數字代表第幾模式   文件更改   centos6   系統啟動時會初始化init init 的配置文件是/etc/inittab文件 用vim /etc/inittab進入查…

    2017-07-22
欧美性久久久久