shell脚本监控mysql主从同步并通过邮箱报警

**

利用shell监控mysql主从,通过线程状态及服务占用端口是否存在来来判断。

不会配置邮箱的往下翻。
因为是监控报警程序,定时任务根据需求来配置。

#例如每一小时执行一次
crontab -e 
 0  */1  *  *  * /usr/src/mariadb.sh

上代码:


#!/bin/bash
#获取本地服务端口,是否为3306根据情况修改。
MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{ print $5 }'`
#获取本机IP,发邮件报警时调用,可以不写。
MYSQLIP=`ifconfig ens33|grep "inet "|awk -F[:" "]+ '{ print $3 }'`
#显示当前时间,年月时分秒
date=`date "+%Y-%m-%d %H:%M:%S"`
#获取IO及SQL线程行
STATUS=$(mysql -uroot -S /var/lib/mysql/mysql.sock -e "show slave status \G" |grep -i "running")
#提取I/O及SQL线程的状态,Yes或No
IO_env=`echo $STATUS |grep IO |awk '{ print $2 }'`
SQL_env=`echo $STATUS |grep SQL |awk '{ print $2 }'`
#判断变量值是否=本地端口号 
#日志发送格式  mail -s "标题" 邮箱  << "内容"  
#或者  echo "内容"| mail -s mail -s "标题" 邮箱 
if [ "$MYSQLPORT" = "3306" ]; then
   echo " mysql is running" >/dev/null
 else
   echo "mysql is shutdown"
   echo "$MYSQLIP is shutdown $date" |  mail -s " MYSQL IS shutdown" [email protected]
fi
#-a 如果存在即为真 左右两个判断都要同时存在
if [ "IO_env"="Yes" -a "$SQL_env"="Yes" ]; then
    echo "slave is running!" >/dev/null
 else
    echo "slave is not running! $date" >> /usr/src/mariadb_error.log  #这里写不写都无所谓 
    echo "slave not running $date" | mail -s "MYSQLIP is not running" [email protected]
fi

**
**

配置发件邮箱:

vim /etc/mail.rc 
#在最下面添加,这里使用163邮箱举例,如果要配置其他的就百度吧。
set from=发件邮箱
set smtp=smtp.163.com
set smtp-auth-user=发件邮箱
#这个密码默认是邮箱登录密码,也可以随机生成,继续往下看
set smtp-auth-password=
set smtp-auth=login

登录163邮箱,点击上方设置,根据图片指引打开服务即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

**

猜你喜欢

转载自blog.csdn.net/qq_30217227/article/details/115058447