shell脚本---mysql检测监控脚本系列

               

                     自学shell脚本之余,学习了关于mysql数据库监控的shell 


0)版本   对端口进行检测
[root@jason ~]# cat check_db.sh
#!/bin/bash

portnum=`netstat -antlp|grep 3306|awk '{print $4}'|awk 'BEGIN{FS=":"}{print
$2}'`if [ "$portnum" == "3306" ]      #截取端口号码
  then
  echo "mysqld is running"
else
  echo "mysqld is stopped"
  /etc/init.d/mysqld start            #启动服务脚本
fi
  这个脚本缺点是  如果没有启动服务  则port是空 所以接下来进行判断时候最好是进行字符串的判断
          修改:  portnum=`netstat -antulp|grep 3306|wc -l`    #判断端口个数是否是1
                 if [ "$portnum" -eq 1 ]                                   #没有启动服务  个数是0

此方法的局限:此处是本地监控;端口在,但是数据库服务不正常(负载、cpu很高的时候)

1)版本  加入对进程检测,双检测 
[root@jason ~]# cat check_db.sh
#!/bin/bash

portnum=`netstat -antulp|grep 3306|wc -l`
processnum=`ps -ef|grep mysqld|grep -v grep|wc -l`    #截取进程信息

if [ "$portnum" -eq 1 -a "$processnum" -eq 2 ]             #并列判断
  then
  echo "mysqld is running"
else
  echo "mysqld is stopped"
  /etc/init.d/mysqld start
fi

此处局限是:只能本地监控;进程在,数据库服务可能不正常(负载、cpu很高的情况下)

2)版本 more专业 最牛b的  增加启动服务失败判断 杀死进程重启操作 
[root@jason ~]# cat check_db.sh
#!/bin/bash
portnum=`netstat -antulp|grep 3306|wc -l`
processnum=`ps -ef|grep mysqld|grep -v grep|wc -l`
mysqlpath=/etc/init.d/mysqld         
logpath=/tmp/mysql.log               #增加日志路径,将启动信息保存 
if [ "$portnum" -eq 1 -a "$processnum" -eq 2 ]
  then
  echo "mysqld is running"
else
  echo "mysqld is stopped"
  $mysqlpath start >$logpath
  sleep 10                           #启动并休息10秒
  portnum=`netstat -antulp|grep 3306|wc -l`    #重新定义以防没有
  processnum=`ps -ef|grep mysqld|grep -v grep|wc -l` #启动成功
  if [ "$portnum" -ne 1 -a "$processnum" -ne 2 ]   #再次判断
  then
  while true                   #设置死循环,如果判断失败            
  do                           #则杀掉之前的mysql进程 直到杀干净为止
     killall mysqld
      [ $? -ne 0 ] && break     #mysql进程全部消失,则终止循环
      sleep 1
  done
  $mysqlpath start >>$logpath && status="successful"||status="failure" 
                           #再次启动 并增加状态  mail -s "mysql startup is $status" [email protected] <$logpath#发邮件
  fi
fi

3) 登陆mysql进行判断

[root@jason ~]# cat check_db1.sh
#!/bin/bash

mysqlstatus=`mysql -uroot -predhat -S /var/lib/mysql/mysql.sock -e "sele
ct version();"  >&/dev/null`
if [ $? -eq 0 ]
  then
  echo "mysqldb is running"
else
  echo "mysqlb is stop and start up now"
  /etc/init.d/mysqld start
fi

此处局限是:必须由mysql客户端,否则不能使用;还有有数据库账号、密码、授权

如果是监控不是本地的数据库,则需要在数据库中授权一个用户,授权脚本所在的监控主机的IP可以连接。
命令大致是:mysql -u -p -S -h -e 检测 


4)通过php/java程序url方式监控mysql
           最接近用户访问,效果最;针对网站用户是否访问正常  并从数据库能获取到数据;可以结合nagios和zabbix进行报警

[root@jason ~]# cat a.php
$link_id=mysql_connect('localhost','root','xxx') or mysql_error();
if($link_id){
echo "mysql successful!";
}else{
echo mysql_error();
}
?>
此方法要事先搭配好lamp环境


你可能感兴趣的:(shell脚本,shell,数据库,mysql,脚本)