#假设,当前Mysql服务的root密码为Aa123456##,写脚本检测mysql服务是否正常
## 比如,可以正常进入mysql执行show processlist,并检测一下当前的mysql服务是主还是从,
## 如果是从,请判断它的主从服务是否异常。如果是主,则不需要做什么。 
#!/bin/bash

## 把这串命令直接赋值到变量里,方便后面多次调用
Mysql_c="mysql -uroot -p123456##"

## 将登陆MYSQL并执行命令的正确和错误输出分别指向不同的文件
$Mysql_c -e "show processlist" >/tmp/mysql_pro.log 2>/tmp/mysql_log.err

# 将已知警告信息删除
sed -i '/mysql: \[Warning\] Using a password on the command line interface can be insecure./d' /tmp/mysql_log.err
num=`cat /tmp/mysql_log.err |wc -l`
echo "文件mysql_log有$num行"

if [ $num -ne 0 ]
then
        echo "MYSQL服务不正常,错误信息为:"
        cat /tmp/mysql_log.err
        rm -f /tmp/mysql_pro.log /tmp/mysql_log.err
        exit 1
else
        ## 将show slave status 的输出信息写入到临时文件
        $Mysql_c -e "show slave status\G" >/tmp/mysql_s.log 2>/dev/null

        ##  如果临时文件内容不为空,则认为是从,否则就是主
        if [ -s /tmp/mysql_s.log ]
        then
                ## 判断主从状态是否正常,主要就是看Slave_IO_Running和Slave_SQL_Running这两行是不是Yes
                y1=`grep 'Slave_IO_Running:' /tmp/mysql_s.log|awk -F : 'print $2'|sed 's/ //g'`
                y2=`grep 'Slave_SQL_Running:' /tmp/mysql_s.log|awk -F : '{print $2}'|sed 's/ //g'`

                ## 只有两个全部为YES,主从状态才是正常的
                if [ $y1 == "Yes" ] && [ $y2 == "Yes"]
                then
                        echo "从状态正常"
                else
                        echo "从状态不正常"
                fi
        fi
fi