正文:
早上我在检查网站时发现一个网站的流量明显减少了。打开网站后,显示数据库连接错误,我立刻意识到了问题的原因,很明显是 MySQL 数据库自动停止了。一般来说,遇到这种情况,说明网站可能遭受了小规模的 cc 攻击,导致数据库或服务器内存无法承受而断开连接。而且这种情况通常发生在晚上。
这些攻击者也非常狡猾,他们知道白天你会密切关注网站,所以他们通常在晚上才发起攻击。因为晚上我们需要休息,没有时间专注于监控网站。因此,我编写了一个定时监控脚本,可以定时检查 MySQL 和Nginx是否停止运行。如果停止运行,脚本会执行重启任务,并将日志记录到/www 目录中。
监控日志存放的目录:
监控的日志:
解决方案
1、MySQL 监控
宝塔面板—>计划任务,输入任务名称、执行周期、脚本内容
脚本内容如下:
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ];then
bash /www/server/panel/script/rememory.sh
/etc/init.d/mysqld start
echo "监控到 MySQL 已停止,已执行重启计划,时间: `date "+%Y-%m-%d %H:%M:%S"` " >> /www/mysql_jiankong.log
fi
2、Nginx 监控
宝塔面板—>计划任务,输入任务名称、执行周期、脚本内容
脚本内容如下:
pgrep -x nginx &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/nginx start
echo "监控到 Nginx 已停止,已执行重启计划,时间: `date "+%Y-%m-%d %H:%M:%S"` " >> /www/Nginx_jiankong.log
fi
3、PHP 监控
宝塔面板—>计划任务,输入任务名称、执行周期、脚本内容
脚本内容如下:
注意:下面第 3 行代码中的 52~73 是指 php 版本 5.2 7.3
pgrep -x php-fpm &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/php-fpm-{52|53|54|55|56|70|71|73} restart
echo "监控到 php 已停止,已执行重启计划,时间: `date "+%Y-%m-%d %H:%M:%S"` " >> /www/php_jiankong.log
fi
4、redis监控
脚本内容如下:
pgrep -x redis &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/redis start
fi
5、memcached 监控
脚本内容如下:
pgrep -x memcached &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/memcached restart
fi
结语:
一般情况下,我们只需要添加 MySQL 和 Nginx 的监控,不需要添加其他的监控。我已经添加了这两个监控项,并且在添加后请务必测试任务的有效性。你可以在宝塔面板中停止 MySQL 和 Nginx 服务,然后执行该任务,观察 MySQL 和 Nginx 的状态是否成功开启。
转载请注明:汇站网 » 解决宝塔 MySQL 数据库频繁自动停止或掉线的方法