问题描述:
监控mysql服务是否正常启动,如果未正常启动,就启动mysql服务。
解决方法:
方法一:
过滤mysql端口3306进行判断。具体脚本如下:
#!/bin/bash
#这里的思路不是最佳的
port=`netstat -lnt | grep 3306 | awk -F '[: ]+' '{print $5}'`
#不要使用整数进行比较,因为一旦端口不存在,比较就会报错
if [ "$port" != "3306" ];then
#/data/3306/mysql start
service mysql start
else
echo "mysql running!!!"
fi
思考:该脚本的好处和局限是什么?
(1)、获取到端口过程比较太复杂,不是好方法。
(2)、不要使用数字进行比较的方式,而是使用字符串比较的方式。
简易版本
#!/bin/bash
#这里是将grep出来的结果转化为行数,进而判断
port=`netstat -lnt | grep 3306 | wc -l`
if [ $port -ne 1 ];then
#/data/3306/mysql start
service mysql start
else
echo "mysql running!!!"
fi
方法二:
思路:如果mysql端口和进程同时存在,即认为mysql服务正常
#!/bin/bash
#通过将端口转换为函数,即端口个数,方便做判断
port=`netstat -lnt | grep 3306 | wc -l`
#通过吧进程转换为行数,即进程个数,方便做判断
pid=`ps -ef | grep mysql | grep -v grep | wc -l`
[ $port -ne 1 ] && [ $pid -ne 2 ] && {
#/data/3306/mysql start
service mysql start
}
echo "mysql running!!!"
改进:
#!/bin/bash
port=`netstat -lnt | grep 3306 | wc -l`
pid=`ps -ef | grep mysql | grep -v grep | wc -l`
if [ $port -ne 1 ] && [ $pid -ne 2 ];then
#/data/3306/mysql start
service mysql start
else
echo "mysql running!!!"
方法三:
思路:模拟web服务器,通过mysql账户连接mysql,然后根据返回命令状态或返回内容确认mysql是否正常(推荐)
#!/bin/bash
mysql -uroot -p123456 -e "select version();" &>/dev/null
if [ $? -ne 0 ];then
#/data/3306/mysql start
service mysql start
else
echo "mysql running!!!"
fi