• 监控mysql状态脚本


    监控mysql状态, 发现宕后, 自动重启, 每秒检查一次。

    check.sh

    #!/bin/bash
    while [ true ]; do
    /bin/sleep 1
    sh mysql_status.sh
    done

    chengkill

    #!/bin/sh
    #pid kill thread for chenglee
    #if fileformat=dos, update fileformat=unix
    #code:set fileformat=unix
    #check:set ff ?
    if [ $# -lt 1 ]
    then
      echo "not procedure_name"
      exit 1
    fi
      
    PROCESS=`ps -ef|grep $1|grep -v grep|grep -v PPID|awk '{ print $2}'`
    for i in $PROCESS
    do
      echo "Kill the $1 process [ $i ]"
      kill -9 $i
    done

    chengkill授执行权扔/usr/bin

    mysql_status.sh

    #!/bin/bash  
    #/usr/bin/nmap localhost | grep 3306  
    #lsof -i:3306  
    MYSQLPORT=`netstat -tlnp | grep "3306"|awk -F[:" "]+ '{print $4}'`  
    STR_TIME=$ date "+%Y-%m-%d %H:%M:%S"
     
    function checkMysqlStatus(){  
        /usr/bin/mysql -uroot -plizhenghua --connect_timeout=5 -e "show databases;" &>/dev/null 2>&1  
        if [ $? -ne 0 ]  
        then  
            restartMysqlService  
            if [ "$MYSQLPORT" == "3306" ];then  
                echo "mysql restart successful......"   
            else  
                echo "mysql restart failure......"   
                python mail.py 
            fi  
        else
            echo "mysql is running..."  
        fi  
    }  
      
    function restartMysqlService(){  
        cat code.txt
        echo "测试重启mysql服务!"
        echo "清除mysql残余!"
        chengkill mysqld
        echo "准备重启!"
        service mysqld restart
        echo "重启成功!"
    #    python mail.py
    }  
      
    if [ "$MYSQLPORT" == "3306" ]  
    then  
        checkMysqlStatus  
    else  
        restartMysqlService  
    fi
    

    mail.py

    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    #Python Mail for chenglee
    #if fileformat=dos, update fileformat=unix
    #code:set fileformat=unix
    #check:set ff ?
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    
    my_sender='11318@qq.com'    # 发件人邮箱账号
    my_pass = 'mwbajizijah'              # 发件人邮箱密码(当时申请smtp给的口令)
    my_user='14783@qq.com'      # 收件人邮箱账号,我这边发送给自己
    my_content='系统管理员您好,该系统的mysql进程已经崩溃并重启失败,请手动重启!!'
    my_title='进程告警'
    def mail():
        ret=True
        try:
            msg=MIMEText(my_content,'plain','utf-8')
            msg['From']=formataddr(["发件人昵称",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To']=formataddr(["收件人昵称",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject']=my_title                # 邮件的主题,也可以说是标题
    
            server=smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是465
            server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()# 关闭连接
        except Exception:# 如果 try 中的语句没有执行,则会执行下面的 ret=False
            ret=False
        return ret
    
    ret=mail()
    if ret:
        print("邮件发送成功")
    else:
        print("邮件发送失败")

    code.txt

    /
       /   /   / 
       ____,____  / 
      //  |ヽヽ  \  / 
     ^^^^^|^^^^^^^ 
    /    | ∩,,∩ /  / 
         |(*(T)*) 
      /   0と  )  / 
           し─ J
            chenglee

    前后两个放在同一个目录, 中间chengkill扔bin, 然后守护模式运行check.sh。

  • 相关阅读:
    WCF添加服务失败。服务元数据可能无法访问。请确保服务正在运行并且正在公开元数据。
    【C#】 实现WinForm中只能启动一个实例
    centos7防火墙问题
    ftp搭建记录
    centos7常用命令
    RocketMQ部署
    mongedb主从
    redis 主从复制+读写分离+哨兵
    keepalive+nginx
    分布架构分析
  • 原文地址:https://www.cnblogs.com/chenglee/p/8378446.html
Copyright © 2020-2023  润新知