欢迎光临
专注android技术,聚焦行业精粹,传扬中国传统文化,我们一直在努力

wordpress 网页出现Error Establishing a database connection

1、背景

我的网站经历了将近2年的频繁出现这个“Error Establishing a database connection” 之后,我终于在两周前下狠心去解决了,目前观察了2周依旧很稳定,所以我终于可以拍胸脯的说我解决了这个问题。

这里我也特别想申明一下,解决这个问题对于不懂wordpress的人来说,真的是隔行如隔山。这两年我挣扎过,放弃了几次。我发现在百度里的博主也好,阿里云的客服也好,他们都不是真心想帮你解决问题的。

阿里云的客服回复大致是可能是插件问题,你要么加个内存吧。但是阿里云的提升1G的内存,价格每个月多了一倍。我只好寻求百度的帮助,但是百度大家都懂前篇一律的转载,整个百度就2个答案:一个是某个插件的原因,由于某个插件占用内存过高导致。但是网站已经搭建好了,要一个一个排除该怎么做到呢,即使做到对网站也很伤。另一个则是前篇一律的转载,都是说搭建网站过程中密码错误呀的这类问题,而我的网站不是不能正常运行,而是偶尔会down掉,所以和这个也无关。

但我在坚持寻找出路的过程中的确看到了很多人也遇到同样的问题,我也终于在Google找到了我想要的答案。这里分享给大家。

 

2、解决方案概要

这里不拐弯抹角,先一句话道出问题的原因:还是内存的原因,但是抛开“加内存”和“排除插件问题”这些旁门左道的方法,这里告诉你一个阿里云不愿告诉你的方案,就是可以在某些内存出现峰值的场景,能临时使用硬盘做为内存交换区,顶住压力,保证网站持续稳定。

 

3、方案详细介绍

3.1、我网站的环境

我的网站是阿里云的“轻量应用服务器”,配置是最低配的:1G内存,20G的SSD硬盘。网站用的是wordpress搭建的,数据库是mysql。

我的问题现象是:有时1周、或者频繁的话一天好几次出现数据库挂掉了,导致网站无法访问。

 

3.2、排查方案

思路:

  1. 知道网站大致down掉的时间,在阿里云后台找到mysql的异常日志,分析确认真实原因
  2. 如果是内存问题,那么设置交换区

 

3.2.1、分析mysql日志

在阿里云后台的“应用详情”找到mysql信息,点击“远程连接”

mysql的位置在/usr/local/mysql,你可以在下面位置找到:

进入到后台会如下显示:

这个时候你要进到data目录下面:

找到红框框圈出来的error日志文件。注意,这里有很多err后缀的文件,我们看哪一个呢,我们可以看时间,选最近的那一个。

接下来打开这个文件,查看到对应时间的错误日志,错误在/usr/local/mysql/bin/mysqld: Shutdown complete 附近

下面截图我们看到错误原因是内存分配失败,也就是内存不够分配了。也许你的情况是别的问题,不过没关系,你走到这一步时也能找到自己的错误的原因是啥了,这样可以针对解决,不是盲目的用那些排除法来解决,那样效率太低,而且对网站很伤。

3.2.2、解决内存问题

既然找到了是内存的问题,那么有上面说的3个方法可以解决:

  1. 升级硬件配置,加内存
  2. 排除部分插件对内存占用过高问题
  3. 使用硬盘做为内存交换区

这里介绍第3种,使用硬盘空间做为内存交换区。

可以参考下面两个链接

下面也会详细介绍一下

1、首先查看当前是否已经启用swap分区

如果没有启用,这里是不会显示大小的。我这里是已经开启了,所以这里有size

2、创建一个文件用于swap分区

我是在mysql目录创建的swaps文件。命令如下:

以上命令创建了一个4G大小的文件,相当于加了4G的内存,此时的心里还是很开心的~

注:此文件的大小是count的大小乘以bs大小,上面命令的大小是4294971392,即4GB

上面这个命令需要一些时间,可以等待一会。

创建完成以后 通过mkswap swaps命令将上面新建出的swaps文件做成swap分区:

3、设置交换区的配置

这一步主要是设置在内存剩余多少时启用该虚拟内存。此时使用cat /proc/sys/vm/swappiness查看数值应该是0,需要sysctl -w vm.swappiness=85把它改成85,这里85的含义是:100%-85%=15%,即物理内存剩下15%的时候时启用虚拟内存。这个值根据个人需要来吧,我的环境内存本来就不大,总共1G,平时运行都已经占一大半了

查看内存使用情况,在linux下可以使用free命令。例如 free -m 可以以Mega(兆字节)为单位,看目前内存剩余情况,例如:

我们可以看到当前内存总共1G,已经使用了350M,可用419M。我们也有一个交换分区,大小为4G,使用了355M,剩余3.7G。

若想永久修改,则编辑/etc/sysctl.conf文件,改文件中有vm.swappiness变量配置。

修改内容如下,然后保存即可:

4、启用交换分区

注意:如果swapon命令失败,提示swapon 失败:设备或资源忙,则可以使用使用swapoff 先关闭分区,然后再使用该命令开启。

swapoff命令如下:

 

5、添加开机自动挂载

目的是服务器重启时能自动开启swap。这个需要在/etc/fstab文件添加如下一句:

注意我的swaps文件在mysql目录下面,你可以替换成你自己的目录。

修改后的内容如下:

可以通过vim查看:

注意:需要加sudo,或者 sudo su,不然会提示你没有权限。

 

6、大功告成

接下来可以通过 cat /proc/swaps 再看下分区是否已经启用。如果你看到Used那一栏有数据了,那代表已经使用上了,那恭喜你问题已经解决。可以尝试重启服务器确认是否也能正常启动。

 

 

赞(2) 打赏
未经允许不得转载:花花鞋 » wordpress 网页出现Error Establishing a database connection

评论 抢沙发

国内精品Android技术社区

专注android技术,聚焦行业精粹,传扬中国传统文化,我们一直在努力

联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册