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 12:12
下一篇 2016-08-15 12:12

相關推薦

  • Linux基礎知識之cp mv rm

    該博文以CentOS6.8_x86_64系統為基礎,Xshell 5遠程連接CentOS系統,以root身份登錄系統和sjsir普通用戶身份登錄系統。 為什么要學習cp、mv、rm命令?     cp、mv、rm命令為Linux系統使用最長使用的三個命令之一,復制、移動和刪除是我們平時處理一些文件必須要學會的命令,應該用于熟練掌握和使用的…

    Linux干貨 2016-07-29
  • LVM2基本應用,擴展及縮減實現

    LVM(Logical Volume Manager,邏輯卷管理)是CentOS6中常用的磁盤管理的工具。常用于CentOS6上,提供了分區的動態擴展、縮減等功能。目前的常用版本為LVM2。 結構: 一、物理卷 LVM的物理卷以分區為單位。通常情況下,會以一個硬盤一個分區的情況下進行容量擴展。 在分區之后,要使用fisk命令來改變分區的類型,LVM的磁盤類型…

    Linux干貨 2016-02-25
  • 馬哥教育網絡班20期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who root     pts/0        2016-06-23&nb…

    Linux干貨 2016-06-29
  • iptables/netfilter入門到進階

    防火墻的概念 Firewall:工作于主機或網絡邊緣,對于進出本主機或網絡的報文根據事先定義的規則作匹配檢測,對于更改被規則匹配到的報文做出相應處理的組件 網絡層防火墻(包過濾防火墻): 優點:對用戶來說透明,處理速度快且易于防護 缺點:一旦黑客突破防火墻,就可以請以偽造數據包源地址、目的地址和IP端口號 代理服務型防火墻(Proxy Service) 優點…

    2017-06-17
  • FHS文件系統各目錄功能

    FHS文件系統各目錄功能 摘要: 本文主要介紹Linux的文件組織目錄結構。 一、Linux 目錄結構 在講 Linux 目錄結構之前,你首先要清楚一點東西,那就是 Linux 的目錄與 Windows 的目錄的區別,或許對于一般操作上的感受來說沒有多大不同,但從它們的實現機制來說是完全不同的。 一種不同是體現在目錄與存儲介質(磁盤,內存,DVD 等)的關系…

    Linux干貨 2016-10-18
  • 系統啟動和內核管理以及幾個重要實驗

    Centos啟動流程:     1.加載BIOS的硬件信息,獲取第一個啟動設備     2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息     3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備 &n…

    Linux干貨 2017-05-15
欧美性久久久久