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

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

问题描述:

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

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

### 如何在Linux中检测MySQL服务是否启动 可以通过多种方法来检查Linux系统中MySQL服务启动状态。以下是几种常用的方法: #### 方法一:使用`systemctl`命令 `systemctl`是现代Linux发行版中用于管理系统和服务的主要工具之一。可以使用以下命令检查MySQL服务的状态: ```bash systemctl status mysql.service ``` 如果MySQL服务正在运行,则会返回类似于以下的信息[^3]: ``` ● mysql.service - MySQL Community Server Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-02-28 12:34:56 UTC; 2h ago ``` #### 方法二:使用`ps`命令 `ps`命令可用于查看当前运行的进程列表。通过过滤包含`mysqld`的关键字,可以确认MySQL服务是否正在运行: ```bash ps aux | grep mysqld ``` 如果有类似以下输出,则表示MySQL服务已在运行: ``` mysql 1234 0.0 0.1 123456 7890 ? Ssl 12:34 0:00 /usr/sbin/mysqld ``` #### 方法三:使用`pgrep`命令 `pgrep`是一个更简洁的方式查找特定名称的进程。执行以下命令即可快速判断是否存在名为`mysqld`的进程: ```bash pgrep mysqld ``` 如果没有输出任何内容,则说明MySQL未运行;反之则会打印对应的PID。 #### 方法四:测试端口监听情况 通常情况下,MySQL默认绑定的是3306端口。利用`telnet`或者`nc(netcat)`工具能够验证此端口是否有响应。 ```bash telnet localhost 3306 ``` 当连接成功时,应该可以看到一些初始握手信息表明数据库引擎处于活动状态[^3]。 #### 方法五:编写Shell脚本来定期监控 为了实现自动化管理,还可以创建一个简单的Bash脚本周期性地探测MySQL实例的工作状况,并在其崩溃后立即恢复它[^2]: ```bash #!/bin/bash if ! pgrep mysqld > /dev/null ;then echo "$(date): Detected that MySQL has stopped unexpectedly." service mysql start || { echo "Failed to restart MySQL"; exit 1;} fi echo "$(date): MySQL is running normally" exit 0 ``` 将上述代码保存成文件比如check_mysql.sh赋予可执行权限并通过cronjob安排定时任务调用这个脚本
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值