Linux 上定时检测 MySQL 服务是否宕机,并自动重启服务

老王有一台小内存的 VPS 服务器,不知道是不是内存不够的原因,MySQL 服务总是会自动停止,数据库都宕机了,网站自然也是无法访问。本文分享个基于 Shell 脚本和 crontab 命令的定时检测 MySQL 服务是否宕机,并自动重启服务的方案,如果你也遇到了这种问题,可是尝试用这种解决办法。

一、检测 MySQL 服务脚本

MySQL 自动重启的 Shell 脚本非常简单,整个逻辑就是检测是否有 MySQL 的进程,如果没有就重启并记录到日志文件中:

pgrep mysqld &> /dev/null
if [ $? -gt 0 ]
then
lnmp restart
echo "MySQL stopped at time: `date` " >> /root/log/mysql_listen.log
fi

二、定时任务

定时检测的功能就是通过 crontab 实现的,具体的介绍可以参考:《Linux 利用 crontab 实现定时任务格式与用法简介

例如我这里设置的是每 5 分钟检查一次 MySQL 服务:

*/5 * * * * /root/mysql.sh > /dev/null 2>&1 &

三、更多脚本

除了检测 MySQL 服务外,相应的还可以检测 PHP 服务、Nginx 服务等,在脚本上略微改动下就好了:

pgrep mysqld &> /dev/null
if [ $? -gt 0 ]
then
lnmp restart
echo "MySQL stopped at time: `date` " >> /root/log/mysql_listen.log
fi

pgrep nginx &> /dev/null
if [ $? -gt 0 ]
then
lnmp restart
echo "Nginx stopped at time: `date` " >> /root/log/mysql_listen.log
fi

pgrep php-fpm &> /dev/null
if [ $? -gt 0 ]
then
lnmp restart
echo "Php stopped at time: `date` " >> /root/log/mysql_listen.log
fi

给TA打赏
共{{data.count}}人
人已打赏
运维

5 分钟带你看懂 Docker

2023-11-15 15:11:45

运维

运维如何装逼证明自己是维护过大型分布式网站的?

2023-11-15 15:42:59

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索