shell 脚本监控MySQL数据库启动状态

大前提:MySQL环境要有

需求:1. 端口号和进程同时存在时才能说明MySQL进程还在

    2. 如果MySQL进程不在了 要能自动重启MySQL进程 并发出邮件通知

开始:

分步来:

(1)查MySQL 端口号还在不在的命令

 执行 :netstat -lnt | grep 3306

 输出: tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN  

使用wc -l 统计行命令:netstat -lnt | grep 3306|wc -l 如果存在返回1 不存在 返回0 Ok 监听端口号 就是这个命令了

(2)查看MySQL进程还在不在

执行:ps -ef |grep mysqld 

输出:


出现了三个进程但是我们只要一个(第二个):首先说下这三个进程出现的原因

第一个进程:因为路径中大有mysql 所以第一个线程会出现 (不建议路径中含有服务的名称 这个的话我们在查找时会带来一些麻烦)

第二个进程:MySQL服务 出现正常

第三个进程:是ps -ef..它自己的进程 

但是虽然出现了三个我们也不可能现在重新装MySQL还有解决的:

分析三个进程的特点,发现以MySQL开头的 进程才是我们需要的进程于是乎使用下面命令,把不含MySQL的过滤掉:

执行:ps -ef|grep mysqld|awk -F " "  '{ if ($1 ~ /mysql/) print  $1}'#如果第一行含有MySQL则输出$1 第一行

输出:mysql #要的就是这样的结果

使用wc -l 改成第一种端口号的方式:$(ps -ef|grep mysqld|awk -F " "  '{ if ($1 ~ /mysql/) print  $1}'|wc -l)#有返回1 没有返回0

2. 如果MySQL进程不在了 要能自动重启MySQL 如果上面两种情况有一个不符合了我们都然乌MySQL进程不在了(端口号小时,MySQL进程不在了)

分析:为了以防万一 我们在发现上面情况不符合是 先使用killall mysqld杀一次(为确保能够杀死这里会使用循环来杀直至杀死)

邮件发送:echo "conten"  mail -s "title" 4123232@163.com

重启MySQL:/etc/init.d/mysql start

单独命令已经写出下面进行组装:

vi  monitoringDB.sh

#!/bin/sh
####################   monitoringDB   ################
##create by zyb
##create date:20151031
 isExistsPort=$(netstat -lnt | grep 3306|wc -l) #判断端口号是否存在
 isExistsThred=$(ps -ef|grep mysqld|awk -F " "  '{ if ($1 ~ /mysql/) print  $1}'|wc -l )#判断MySQL进程是否存在
 startDB=/etc/init.d/mysql#启动mysql的路径
 logPath=/server/script/info.log#日志存放地址

 if [ "$isExistsPort" -ne "1" -o "$isExistsThred" -ne "1" ]
   then
        $startDB  start >> $logPath #starting mysql db
        sleep 10
 isExistsPort=$(netstat -lnt | grep 3306|wc -l)
 isExistsThred=$(ps -ef|grep mysqld|awk -F " "  '{ if ($1 ~ /mysql/) print  $1}'|wc -l)
 if [ "$isExistsPort" -ne 1 -o "$isExistsThred" -ne "1" ]
        then
       while true
       do
          killall mysqld
          sleep 1
           [ $? -ne 0 ]&& {#如果第一次杀掉了 第二次在执行 就会报错这里 $?就不是0 了 所以不是0时我们就跳出去
                 echo "db is stoped">>$logPath
                 break
                }
        done
       $startDB start >> $logPath&&status="successful" || status="failer" #starting mysql db again
        mail -s "db status is $status" sunyya@163.com < $logPath#发送邮件 "db status is $status“标题 $logPath 内容
    fi





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值