近来omo.design旗下各网站不定期出现“Error Establishing a Database Connection”访问受限的状况,且出现频率越发频繁,登陆后台服务器发现是MySQL已自动关闭,从而导致数据库连接错误,CUP运行堵塞,手动重启MySQL或重启服务器后,问题得到解决,网站恢复访问,但这并不是长久之计~

BG:腾讯云Centos Nginx轻量服务器,Linux系统,宝塔面板后台管理,基于WordPress搭建的多个网站,故障通常不分站点同步出现

可能因为内存不足CPU占用100%,服务器负载过高而导致MySQL数据库服务意外停止

解决思路:① 增加虚拟内存,优化PHP缓存;② MySQL关闭后自动重启

Step 01:配置Swap/虚拟内存 

在宝塔面板的【应用商店】中搜索“Linux工具箱”,点击 安装,安装完成后,在Linux工具箱的弹窗设置中,找到 Swap/虚拟内存 设置项,根据使用的服务器配置来进行虚拟内存的设置:

  • 2G 及以下内存的服务器,建议设置成和物理内存相同容量的Swap
  • 2G 以上的内存的服务器,建议设置为 2G,如果网站程序特别耗内存,也可以设置与内存相同容量的Swap。

Step 02:安装PHP缓存加速扩展

出现“MySQL服务自动关闭”问题的一大原因就是服务器过载,可以优化服务器中的PHP缓存环境来增加服务器的稳定性。

在宝塔面板的【软件商店已安装】的应用分类列表中找到当前网站运行使用的PHP版本,在弹出操作窗口中,切换到安装扩展,在扩展列表中找到 opcache 和 memcached 并安装。

Step 03:添加 MySQL 服务自动重启的 Shell 脚本

在宝塔面板中的计划任务中,添加 MySQL 数据库自动重启的 shell 脚本:

定时重启】定时自动重启运行中的 MySQL 数据库,缓减 MySQL 数据库的压力

pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ];then
        bash /www/server/panel/script/rememory.sh   
        /etc/init.d/mysqld start      
fi

Base:MySQL进程守护 - 每小时/40分钟 - root

自动重启】通过自动检测 MySQL 数据库状态,如果检测为停止,则自动重启

#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH pgrep -x mysqld /dev/null if [ $? -ne 0 ] echo At time:$(date) :MySQL is stop . /var/log/mysql_messages service mysqld start fi

Base:MySQL自动重启 - N分钟/1分钟 - root

Step 04:配置宝塔面板警告通知

在宝塔面板首页左上角的【警告】-“警告通知” - 关注公众号/绑定微信,由此一来服务器异常便能第一时间得到通知,以便尽快处理。