解决: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分区中恢复保存的数据到内存中。
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了!