序言
我当前的这个 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
最新评论
我想请问下。您这部署后能够上传附件图片吗?我按照您的方式部署后。能运行。但是无法上传附件,图片。
感谢教程,但是我安装后无法上传附件。图片什么的都上传不了。您这可以吗
你这个能够添加附件图片吗?我怎么无法上传图片附件呢。。
这个软件有bug的,客户端windows有些键不能用如逗号、句号
没有收到邮件通知
我的评论通知貌似坏掉了,定位一下问题
测试一下重新部署后的邮件功能
居然看到自己公司的MIB库,诚惶诚恐