解决:wordpress error establishing a database connection problem

我是个网站菜鸟,刚开始搭建LAMP环境的时候,就要了我半条老命。

没办法,懂的东西太少,LAMP是什么我都不懂,域名是什么,我也被不懂,为什么想要有个网站就要有服务器我还是不懂。一步步地自己去钻,去看digitalocean给的说明教程。慢慢就懂了。

 

我的VPS(Virtual Private Server虚拟专用服务器)的配置很low,CPU只有512M- -

最开始解决这个问题,就是重启我的服务器

reboot
httpd -k  restart

 

以上两个代码用的飞起,实际上如果是database crash了,以下两个命令应该就ok了

systemctl start mariadb
systemctl status mariadb

 

 

好吧,问题来了。刚开始的时候,我发现error establishing这个问题的时候,我根本不知道怎么回事。后来这几天学了一下mysql的配置才知道。首先,我想要描述一下,解决问题的步骤。

1、发现error establishing a database connection的问题——稍微google一下就知道是数据库的问题

2、去查数据库mysql的err log。具体位置应该是在/var/log下面

3、查了以后我就发现是 out of memory,cannot allocate innodb buffer pool=128M(内存只有512M你让我怎么办)的问题了

4、google了一下,这种问题有两种解决方法:

  有一种方法就是增加swap文件(下面详细介绍swap空间及其增加方法):digitalocean的add swapfile教程

  还有就是要修改你的innodb_buffer_pool_size(下文详细介绍)


 Swap空间:

Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

先来说下swap的工作原理:
swap 的工作我们可以看成是一个静态的中转装置。假如我们的内存是512M的。当有任务来了但是由于之前任务和并发任务占有了许多的工作空间,使得这个工作的位 置要大于512M的空间时,就会导致启动失败。因为没有它的位置。这个时候许多的工程师和技术牛人们就发明了这个swap空间,即虚拟内存的技术。 swap空间实际是在硬盘上的。工作原理是:当我们有 一个任务来到的时候,发现物理内存空间不够了,那么我们把这之前用户开启了但是经常没有使用的空间给释放出来,将他们的一些信息存入swap空间。然后给 这个后来的程序先用物理内存空间,当我要用到之前的程序的时候我们再从swap空间将之前保存的内容调用回来。
 
增加swap空间的两种方法:第一种是创建一个swap分区,第二种是创建swap文件,这里我们介绍第二种比较简单的方法
1、查看本机有没有已经配置的swap空间,利用下面的命令可以看到swap空间的使用情况
swapon -s

 如果你没有配置swap空间,发现敲完上面的命令,什么也没有,如果你配置了,就会出现下面的情况,我在我的VPS上配置的是4G:

还有一种方法就是用free,它会显示出系统整体的内存使用情况:

free -m

 

2、查看可用的硬盘空间,因为swap空间实际上要用的是硬盘空间,所以,当然你要查看还有多少硬盘可用

df -h

 

 3、创建一个swap文件,并更改其权限

sudo fallocate -l 4G /swapfile

我们查看这个文件的权限

-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile

会发现这个文件的可读权限是开发给任何人的,这样是非常不安全,因此我们要改变一下这个文件的权限

sudo chmod 600 /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile

 

 恩,这样就安全多了

 4、使用这个swap文件

使用下面这个命令,告诉系统我们要把这个文件作为swap文件了

sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf

 然后就是要使用这个swap文件了:

swapon -s

 

Filename                Type        Size    Used    Priority
/swapfile               file        4194300 0     -1

 

然后我们再用free -m命令查看内存的使用情况:

发现这个swap文件已经ok了!

5、使得这个新加入的swap文件永久生效,在系统启动的时候就生效,因此我们要在/ect/fstab文件里加入下面一行

先用vi打开文件,然后添加下面一行,然后保存。

sudo vi /etc/fstab

 

/swapfile   swap    swap    sw  0   0

 


修改innodb_buffer_pool_size:

我的VPS上装的mariadb(15个mariadb的性能调优方法)。它有四个配置文件- - 分别都在/etc下面:

my.cnf.d是一个文件夹:(这里面有三个文件,忽视掉那个bakup文件,是我修改sever的备份)

然后去/usr/share/mysql里面,会有一些example的配置文件,copy一份过来,我的VPS的配置,我选择了medium那个文件

然后重启mariadb

systemctl restart mariadb

 

我们查看一下innodb_buffer_pool_size有没有被修改

查看方法:进到mysql里面,然后select下面那个变量。

mysql -uroot -p

 

mysql> SELECT @@innodb_buffer_pool_size/1024/1024/1024;

 

恩,发现已经被我们改成50M了!

 

posted @ 2016-08-30 12:36  0giant  阅读(5968)  评论(0编辑  收藏  举报