ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 数据库 >> MySql >> MySQL慢日志监控脚本使用剖析

MySQL慢日志监控脚本使用剖析

来源:网络整理     时间:2014-11-17     关键词:

本篇文章主要介绍了"MySQL慢日志监控脚本使用剖析",对于MySql感兴趣的同学可以参考一下:

   公司线上的 MySQL 慢日志,之前一直没有做好监控。趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下。

       针对脚本的注解和整体构思,我会放到脚本之后为大家详解。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

#!/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=liuhao@51baturu.com            # 指定发送给哪个管理员

function USAGE {

    echo -e "\033[31m脚本名称: \033[37m"

    echo "    $0"

    echo -e "\033[31m语法结构: \033[37m"

    echo "    $0 {start|stop|restart} MySQL慢日志文件路径"

    echo -e "\033[31m使用范例: \033[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 "\033[31m注意事项: \033[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#-}

        tail -$SUM_POINT $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!

       以上就是脚本的全部内容。整个脚本由四个主函数构成。针对每个函数的作用,我这里做下介绍:

1

2

3

4

USAGE   # 该函数负责提示用户如何正确使用该脚本

start   # 该函数负责启动脚本

stop    # 该函数负责停止监控脚本

restart # 该函数负责重启监控脚本

       下面附上脚本的使用效果图:

      脚本的整个思路就是,通过while :;do statement;done启一个死循环,然后在死循环里面通过 sleep 来控制死循环的循环间隔。在指定的循环间隔内,通过取MySQL慢日志的长度作为一个记录点,然后在下一个循环到来时,通过比对上一个记录点来得出,日志是否有变化。如果有变化,就通过计算记录点的差值来得出增长值。通过增长值来获取到增长的这部分日志,然后通过mail发送到指定的管理员邮箱。

      这里展示下发送出来的邮件:

      OK!其它的一看就懂,这里就不废话了。

以上就介绍了MySQL慢日志监控脚本使用剖析,包括了方面的内容,希望对MySql有兴趣的朋友有所帮助。

本文网址链接:http://www.codes51.com/article/detail_93865.html

相关图片

相关文章