shell监控mysql服务是否正常启动

xiaoxiao2021-02-28  112

问题描述:

监控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

如果小伙伴有什么好的思路,请及时交流,谢谢!

转载请注明原文地址: https://www.6miu.com/read-53458.html

最新回复(0)