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

本文介绍三种检查MySQL服务是否正常运行的方法,并提供相应的bash脚本实现。包括基于端口监听、进程数量及直接尝试连接MySQL服务器的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

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

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值