mysql数据库监控

>
因为线下要模拟线上环境的测试,所以我们在线下的测试服务器也部署了一个集群环境,集群环境最初创造了一些数据,但是为了避免在测试过程中脏数据的产生和对测试人员造成的误导,所以最新的不包含脏数据的一些内容,我们会执行定期备份和回复。
在集群环境下,恢复数据是一个耗时并且重复的工作,这时候就要考虑自动化来实现了。因此自己写脚本。计划分为两个脚本来实现,第一个:mysql数据库监控,即环境检查,检查当前服务器的mysql状态。第二个:mysql自动恢复。恢复成功后,检查状态,在环境有问题时,自动解决。
>

方法一
netstat -lanp|grep tcp|grep 3306|wc -l
方法二
/usr/bin/lsof -i:3306|wc -l
方法三
mysql -u用户名 -p密码 -e “select version();’ &>/dev/null
echo $?
判断返回值
方法四
ps -ef|grep mysql|grep -v grep|wc -l
// 在利用进程判断时,如果语句放置于脚本中,脚本的名称就不要包含有Mysql的字样了,否则就会产生判断不准确的情况出现,因为会把脚本也grep了一次,导致结果不准确;

注:> /dev/null 2>&1表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
$?表示上一个命令执行的状态,如果执行成功,就为0.

代码如下:

#!/bin/bash
status=`/etc/init.d/mysqld status|grep running|wc -l`
process=`ps -ef |grep mysqld|grep -v grep|wc -l`
port=`lsof -i:3305|grep -i listen|wc -l`
IP_now=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
colony="200.200.169.10"
result=$(echo $IP_now | grep "${colony}")
mysql -uroot -psangfordb-e "show databases;" >/dev/null 2>/dev/null
a=$?
if [ $a -eq 0 ] && [ $port -ne 0 ] && [ $process -ne 0 ] && [ $status -ne 0 ]
then
    echo "mysql is running" 
else 
    echo "mysql is not running"
        /etc/init.d/mysqlaccd stop
    if [[ "$result" != "" ]]
    then
        echo "替换hosts"                   #判断是否为集群,如果是,则替换hosts文件
                echo "$IP_now"
        sed -i "s/^.*workflowdb的服务域名.*$/$IP_now workflowdb的服务域名/" /etc/hosts
        sed -i "s/^.*reimbursedb的服务域名.*$/$IP_now reimbursedb的服务域名/" /etc/hosts
        sed -i "s/^.*storedb的服务域名.*$/$IP_now storedb的服务域名/" /etc/hosts
                echo "替换hosts文件成功"
    fi
        echo "重启mysql" 
    /etc/init.d/mysqld restart

fi

你可能感兴趣的:(shell)