脚本分享-MYSQL服务+主从+告警通知监控

1、配置MYSQL本地免密登录

账号密码会信息会记录到用户家目录下的".mylogin.cnf"文件中,若你想重新输入密码登录的话则删除此文件即可。

[[email protected] ~]# mysql_config_editor set --user=root --host=localhost --port=3306 --password
Enter password: 

2、配置邮件转发

我们需要安装邮件客户端软件"Mailx",然后配置公司公共邮箱用于邮件发送。

[[email protected] ~]# yum -y install mailx
[[email protected] ~]# vi /etc/mail.rc
在文件尾部追加内容
set [email protected]
set smtp=smtp.126.com
set smtp-auth=login
set [email protected]
set smtp-auth-password=xxxxx
[[email protected] ~]# echo ‘hello world!‘ | mail -s ‘你好‘ [email protected] 

3、编写脚本

编写思路:

  • 检测MYSQL服务是否运行,若运行则检测MYSQL主从复制状态,若未运行则邮件告警通知管理员处理,并记录日志
  • 检测MYSQL主从复制状态,若异常则告警通知管理员处理,并记录日志
  • 脚本采用死循环方式运行,每10秒运行一次
  • 为了防止在循环过程中出现的反复邮件告警通知和日志记录,我采用临时文件的方式,通过IF判断过滤其重复写入日志和邮件发送,当状态发生切换时才会记录日志和发送邮件

脚本内容如下:

while :
do
#配置部分
[email protected]
#设置管理员邮箱,多个邮箱以空格间隔
LOG_PATH=/var/log/mysqlmonitor.log
#设置日志文件路径
MYSQL_PORT=3306
#设置MYSQL数据库端口
IP_DEVICE=ens160
#设置主机网卡设备名

HOST_IPADDR=`ifconfig $IP_DEVICE |awk ‘NR==2{print $2}‘`
LOCAL_DATE=`date +%Y-%m-%d\ \%H:%M:%S`

TMP_FILE_PROCESS=/tmp/mysqlprocess.tmp
TMP_FILE_MASTER_AND_SLAVE=/tmp/mysqlms.tmp

if [ ! -e $TMP_FILE_PROCESS ] || [ ! -e TMP_FILE_MASTER_AND_SLAVE ]
then
touch $TMP_FILE_PROCESS
touch $TMP_FILE_MASTER_AND_SLAVE
fi

MYSQLMONITOR_TMP_ONE=`cat $TMP_FILE_PROCESS |grep ‘MYSQL服务运行正常!‘|wc -l`
MYSQLMONITOR_TMP_TWO=`cat $TMP_FILE_PROCESS |grep ‘MYSQL服务未运行!‘|wc -l`
MYSQLMONITOR_TMP_THREE=`cat $TMP_FILE_MASTER_AND_SLAVE |grep ‘MYSQL主从复制工作异常!‘|wc -l`
MYSQLMONITOR_TMP_FOUR=`cat $TMP_FILE_MASTER_AND_SLAVE |grep ‘MYSQL主从复制工作正常!‘|wc -l`

MYSQL_ACTIVE=`netstat -lnupt |grep $MYSQL_PORT|wc -l`

if [ $MYSQL_ACTIVE != 0 ]
then
        if [ $MYSQLMONITOR_TMP_ONE = 0 ]
        then
        echo "$LOCAL_DATE $HOST_IPADDR MYSQL服务运行正常!">>$LOG_PATH
        echo ‘MYSQL服务运行正常!‘>$TMP_FILE_PROCESS
                for i in $ADMIN_MAILS
                do
                echo -e "MYSQL服务已恢复正常运行!信息如下: \n发生时间:$LOCAL_DATE \n发生主机:$HOST_IPADDR" |mail -s "主机:$HOST_IPADDR MYSQL服务已恢复正常运行" $i
                done
        fi

Slave_IO_Running=`mysql -e "show slave status\G;" |grep "Slave_IO_Running:"|awk -F ‘:‘ ‘{print $2}‘`
Slave_SQL_Running=`mysql -e "show slave status\G;" |grep "Slave_SQL_Running:"|awk -F ‘:‘ ‘{print $2}‘`
Slave_SQL_Running_State=`mysql -e "show slave status\G;" |grep "Slave_SQL_Running_State:"|awk -F ‘:‘ ‘{print $2}‘`

        if [ $Slave_IO_Running = No ] || [ $Slave_SQL_Running = No ]
        then
                if [ $MYSQLMONITOR_TMP_THREE = 0 ]
                then
                echo "$LOCAL_DATE $HOST_IPADDR MYSQL主从复制异常!">>$LOG_PATH
                echo ‘MYSQL主从复制工作异常!‘>$TMP_FILE_MASTER_AND_SLAVE
                        for i in $ADMIN_MAILS
                        do
                        echo -e "MYSQL主从复制工作异常!请及时处理!信息如下:\nIO线程:$Slave_IO_Running \nSQL线程:$Slave_SQL_Running \n错误信息:$Slave_SQL_Running_State \n发生时间:$LOCAL_DATE \n发生主机:$HOST_IPADDR" |mail -s "主机:$HOST_IPADDR MYSQL主从复制工作异常" $i
                        done
                fi
        else
                if [ $MYSQLMONITOR_TMP_FOUR = 0 ]
                then
                echo "$LOCAL_DATE $HOST_IPADDR MYSQL主从复制正常!">>$LOG_PATH
                echo ‘MYSQL主从复制工作正常!‘>$TMP_FILE_MASTER_AND_SLAVE
                        for i in $ADMIN_MAILS
                        do
                        echo -e "MYSQL主从复制工作已恢复正常!信息如下:\nIO线程:$Slave_IO_Running \nSQL线程:$Slave_SQL_Running \n发生时间:$LOCAL_DATE \n发生主机:$HOST_IPADDR" |mail -s "主机:$HOST_IPADDR MYSQL主从复制工
作已恢复正常" $i
                        done
                fi
        fi
else
        if [ $MYSQLMONITOR_TMP_TWO = 0 ]
        then
        echo "$LOCAL_DATE $HOST_IPADDR MYSQL服务未运行!">>$LOG_PATH
        echo ‘MYSQL服务未运行!‘>$TMP_FILE_PROCESS

                for i in $ADMIN_MAILS
                do
                echo -e "MYSQL服务未运行!请及时处理!信息如下: \n发生时间:$LOCAL_DATE \n发生主机:$HOST_IPADDR" |mail -s "主机:$HOST_IPADDR MYSQL服务未运行" $i
                done
        fi
fi
sleep 10;
done

4、运行脚本

作为守护进程运行。
[[email protected] ~]# nohup sh mysqlmonitor.sh >/dev/null &

5、测试脚本

  • 运行脚本
  • 测试MYSQL服务是否正常运行,手动关闭启动服务,是否查收到了邮件通知
  • 测试MYSQL主从复制状态,手动关闭启动MYSQL主从,查看是否查收到了邮件通知

原文地址:http://blog.51cto.com/10978134/2149268

时间: 2024-11-10 13:11:07

脚本分享-MYSQL服务+主从+告警通知监控的相关文章

shell脚本:监控MySQL服务是否正常

监控MySQL服务是否正常,通常的思路为:检查3306端口是否启动,ps查看mysqld进程是否启动,命令行登录mysql执行语句返回结果,php或jsp程序检测(需要开发人员开发程序)等等: 方法1:监听3306端口 #!/bin/bash #written by [email protected] port=`netstat -nlt|grep 3306|wc -l` if [ $port -ne 1 ] then  /etc/init.d/mysqld start else  echo "

MySQL的keepalived高可用监控脚本

MySQL的keepalived高可用监控脚本 MySQL(或者其它服务)的keepalived高可用监控脚本 开发脚本需求 :我们知道,keepalive是基于虚拟ip的存活来判断是否抢占master的机制的,但是如果我们做了MySQL的keepalived的高可用的时候,就要考虑一种情况的发生,那就是如果机器网卡并没有断,二十由于MySQL服务的不稳定,或者人为的误操作,导致的服务关闭,会引起的结果就是,keepalive并不会切换,因为并不是主master的虚拟ip不存在,而是服务已经停止

zabbix实现对mysql数据库主从监控

1.主从关系建立 配置mysql-master端: 1)修改mysql-master的配置文件 [[email protected] ~]# vim /etc/my.cnf [mysqld] server_id=1 innodb_file_per_table datadir=/data/mysql socket=/var/lib/mysql/mysql.sock log-bin=/data/log-bin/bin binlog_format=row -- 2)启动mysql服务,并授权从服务用户

监控利器Nagios之一:监控本地NFS和外部HTTP、MySQL服务

监控利器Nagios之一:监控本地NFS和外部HTTP.MySQL服务 Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知. Nagios的特点: 1.监控服务http.MySQL.nfs.tcp.ping等 2.监控主机资源cpu.负载.I/O.虚拟及内存磁盘利用率等 3.支持邮件微信等报警通信. 4.可选we

第25章 MySQL replication(主从)配置及加入nagios监控

环境介绍: master:23.247.76.253 [[email protected]_client1 tool]# mysql -V mysql  Ver 14.14 Distrib 5.6.32, for linux-glibc2.5 (x86_64) using  EditLine wrapper [[email protected]_client1 tool]# cat /etc/redhat-release CentOS release 6.7 (Final) slave:23.2

zabbix应用-监控mysql slave 主从状态

线上服务的监控已经基本搞定了,现在就剩下mysql 主从的状态没有检测,这里要想用zabbix 监控,还得写一个获取主从状态的脚本,然后设置一个key,创建模板套用这个key 获取mysql 的主从状态是否正常. 1.这里把我的脚本贴一下,脚本要给可执行权限 #!/bin/bash user=zabbixagent passwd=zabbixagent port=$1 #自定义函数 function status {    status=`/data/mysql_root/mysql/bin/m

shell习题第26题:监控mysql服务

[题目要求] 假设mysql密码是123456. 写脚本监控mysql服务是否正常,比如是否可以执行show processlist,并检测一下当前的mysql服务是主还是从.如果是从,请判断他的主从服务是否正常.如果是主,则不需要做什么 [核心要点] mysql -uroot -p123456 -e "show processlist" show slave status [脚本] #!/bin/bash mysql="/usr/local/mysql/bin/mysql

Zabbix实现电话、邮件、微信告警通知的实践分享

众所周知Zabbix 是一款用来监控IT基础设施的监控套件,同时也具有很多方便运维人员使用的优秀功能,如:支持多条件告警,支持多种告警方式,支持多组模板.支持模板继承,因此在众多的开源运维监控软件中独占鳌头,受到了众多企业青睐.暇瑜不掩,Zabbix在告警方式还是有一定局限性,如Email发送告警配置繁琐,需要调用邮件引擎脚本通过 SMTP 发送邮件:如用微信接收告警,需要申请一个微信公众号,接入复杂周期较长:如用短信接收告警,短信网关良莠不齐稳定性无法保证:如用语音接收告警,模板定义重口难调.

监控MYSQL服务是否异常

问题描述:监控MYSQL服务是否正常启动,如果未正常启动,就启动MYSQL 判断mysql的方法: 1)端口判断 [[email protected] ~]# netstat -lntup | grep 3306 tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2288/mysqld 2)进程判断 [[email protected] ~]# ps -ef | grep mysqld