欢迎光临!
若无相欠,怎会相见

Linux 检测 MySQL 状态脚本

序言

我当前的这个 Blog 运行在 Linux VPS 上, 但是由于 VPS 内存较小, 随着数据量的增加, 已经出现了多次 MySQL 挂掉的情况, 我本人发现不及时的话就会出现长时间宕机的情况, 因此有了这个检测 MySQL 状态的需求。

方案

直接使用的 Linux 中最常用的 Shell 脚本, 脚本也特别简单, 就是查看当前系统中是否有 mysqld 服务的进程 ID , 即 PID, 若没有就重新拉起来 mysqld 。

当然不管 mysqld 有没有挂掉都会记录日志, 方便我后期查看情况是否特别严重, 如果很严重的话, 就要考虑改进一下网站架构了 。

废话少说, 脚本如下:

#!/bin/bash
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ]
then
echo `date +"%F %T"`: MySQL is stoped. >> /home/wwwlogs/mysql_restart.log
lnmp mysql start
else
echo `date +"%Y-%m-%d %H:%M:%S"`: MySQL server is running. >> /home/wwwlogs/mysql_restart.log
fi

就几行代码, so easy !

当然, 我还需要定时执行, 例如每隔 15 分钟检测一次, 虽然每次执行的时间很短暂, 但是由于流量不大, 也就不需要检测太频繁了, 当然主要原因是 VPS 内存不足, 所以这只是一个临时解决方案, 后面再改进, 定时执行的换直接使用 Linux  的 crontab 工具 :

crontab -e   # 进入编辑 crontab 状态

0 12 * * * ntpdate cn.pool.ntp.org   # 每天 12 点执行同步时间命令
*/15 * * * * bash /home/script/mysql_restart.sh  # 每隔 15 分钟执行 MySQL 检测脚本

然后就一切 OK 了 。 如下是我的执行日志 :

2021-07-12 18:15:01: MySQL server is running.
......
2021-07-14 00:45:01: MySQL server is running.
2021-07-14 01:00:02: MySQL is stoped.
2021-07-14 01:15:01: MySQL server is running.
......
2021-07-15 20:30:01: MySQL server is running.
2021-07-15 20:45:01: MySQL server is running.
2021-07-15 21:00:01: MySQL server is running.

从 7 月 12 号截止当前, 就 7 月 14 号零点 45 分到 1 点这个 15 分钟间, MySQL 挂过一次, 如果等我自己发现, 需要等到白天, 这中间至少有 8 个小时是挂机状态, 总的来说是可用的。

结语

本次就先到此结束, 后面再考虑更好的办法。

如有错误,敬请指出,感谢指正!   — 2021-07-15  21:10:57

赞(0) 打赏
转载请注明:飘零博客 » Linux 检测 MySQL 状态脚本
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临