#!/bin/bash
# 本脚本用来在指定频率内监控 MySQL 慢日志的变化,并在发生增长时及时报警
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=xxxxxx@qq.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_POINT=$(($NEW_POINT-$OLD_POINT))
        #SUM_POINT=${SUM_POINT0#-}
                if [ $SUM_POINT == 0 ] ; then
                        continue
                else
                        sed -n "/.*/{${OLD_POINT},${NEW_POINT}p}" $MON_FILE > $DIFF_MON_FILE
                        if [[ -s $DIFF_MON_FILE ]];then
                                SUM_POINT=$[$SUM_POINT+1]
                                sed -i '1i 本次新增慢日志 '$SUM_POINT' 条'  $DIFF_MON_FILE
                            mail -s "[警告] 服务器 $(hostname) 产生 MySQL 慢日志 $SUM_POINT 条" $ADMIN_MAIL < $DIFF_MON_FILE
                                echo "$(<$DIFF_MON_FILE)"
                                > $DIFF_MON_FILE
                                echo $NEW_POINT > $MON_POINT_FILE
                        fi
        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

MySQL慢日志监控脚本相关推荐

  1. 更新MySQL复制 自动监控脚本

    具体代码请见: MySQL复制 自动监控脚本 增加了判断slave落后于master多少秒的机制. 本文出自 "MySQL中文网"博客 http://www.imysql.cn/ ...

  2. mysql 慢日志报警_一则MySQL慢日志监控误报的问题分析

    之前因为各种原因,有些报警没有引起重视,最近放假马上排除了一些潜在的人为原因,发现数据库的慢日志报警有些奇怪,主要表现是慢日志报警不属实,收到报警的即时通信提醒后,隔一会去数据库里面去排查,发现慢日志 ...

  3. 整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新!

    整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新! 一.ffmpeg脚本 1.1 打开进程,并判断进程数量 1.2 关闭进 ...

  4. mysql二进制日志管理_MYSQL二进制日志管理脚本

    MYSQL二进制日志管理脚本脚本原理是每小时对进行flush生成新的二进制日志,将二进制日志备份至NFS,并压缩存放:#!/bin/bash#Purpose:管理二进制日志,每小时刷新二进制日志,并将 ...

  5. mysql审计日志归档

    mysql审计日志归档 1.开启审计日志 # 启动审计,在mysql中执行命令: set global general_log=on; set global log_timestamps=SYSTEM ...

  6. linux 监控mysql脚本_Linux系统MySQL主从同步监控shell脚本

    操作系统:CentOS系统 目的:定时监控MySQL数据库主从是否同步,如果不同步,记录故障时间,并执行命令使主从恢复同步状态 1.创建脚本文件 vi /home/crontab/check_mysq ...

  7. mysql日志监控 zabbix_zabbix日常监控项mysql(七)

    参考文档: 先简单搭建mysql服务,用于后续zabbix监控来用 centos7.4客户端安装agent #关闭SElinux(临时关闭) [root@db01~]# getenforce Enfo ...

  8. mysql isnu_mysql和nginx服务是否正常监控脚本

    一.监控web服务器和mysql方法 1.监控端口(nginx也相同) 1.1本地监控 netstat -tunlp|grep 3306|wc -l ss -tunlp|grep 3306|wc -l ...

  9. 简单分析MySQL 一则慢日志监控误报问题

    这篇文章主要介绍了MySQL 一则慢日志监控误报的问题分析与解决,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下 之前因为各种原因,有些报警没有引起重视,最近放假马上排除了一些潜在的人为原 ...

最新文章

  1. 常见字符串和数值间得转换
  2. 【SpringCloud】Ribbon-实例
  3. Discuz! X3.2新增管理员无法登录后台的解决办法
  4. 达梦数据库修改字段长度_DM7 达梦数据库 序列 和 自增列 说明
  5. 如何修改物料主数据的利润中心
  6. mysql权限create细化_mysql权限精细化分配-阿里云开发者社区
  7. c++builder tadoquery存储过程_Electron桌面应用程序从创建项目、启动项目到打包程序的详细过程...
  8. 案例 项目经理评分 c# 1613922661
  9. Docker启动一个Centos镜像
  10. 线性电源与开关电源的区别
  11. SpringBoot工作机制
  12. Xcode 9以下(xip) 官方直接下载地址(离线下载)
  13. 第044篇:VBA之三种单元格引用小结(Range、Cells、[单元格区域])
  14. 【计算机毕业设计】双月湾亲子高端酒店网站
  15. 南京地铁6号线双龙街出入口线区间盾构段开工
  16. 卫青和霍去病:汉匈战争史最天才的两名战将
  17. win10照片应用打不开的解决方法
  18. thinkphp创建临时表
  19. iOS - 技术储备列表
  20. Windows独享主机网站访问缓慢的原因和解决方法

热门文章

  1. [配置]linux如何联网
  2. MongoDB 实验——数据备份和恢复和数据库优化
  3. [Citylife]猜猜这是什么菜?
  4. 蒙地卡罗模拟和 CPA
  5. 30年间三个价格屠夫:刘强东正火 前有倪润峰与黄光裕
  6. 小赢理财获iTrust互联网信用评价中心AAA级信用认证
  7. 函数指针的定义和使用
  8. html5制作大小写转换,Convert Case - 英文大小写转换工具
  9. 计算机交流会活动流程,大学心灵交流会活动策划
  10. 大班线描机器人_大班线描画教案