Forece Blog

Forece Blog

VPS WordPress 建立数据库连接时出错

WordPress 博客从虚拟机搬家到 VPS 还没两天就悲剧了。进入网站就是十个大字 “建立数据库连接时出错” ,然后后台也进不去。拿出 Putty 连接 SSH。发现 MySQL 服务进程被 Kill 了。然后重启 MySQL。博客恢复正常。可没过30分钟,博客又挂了。还是同样的错误。

好吧,架起 Google 搜索大法,找到一堆关于 “Wordpress 建立数据库连接时出错” 的文章,不过大部分不是我想要的答案。不过确实,这些问题也会造成数据库连接出错的问题。这里 Forece 还是稍微写一下吧。

1. wp-config.php 文件配置不当

因为 wp-config.php 是配置你主机及数据库信息的文件,当你网站搬家后,新建的数据库与wp-config名称或密码不符的话,就会造成这个问题,检查下 wp-config 看下数据库配置是否正确即可修复这个问题。

2. 数据库 wp_options 表单需要修复

登陆 phpmyadmin 然后选择 wp_options 表单,然后进行修复即可,或者在 wp-config.php 中添加一句话

1
define('WP_ALLOW_REPAIR', true);

然后登陆网站后台 /wp-admin/ 进行自动修复。

然而,以上解决方案均不是 Forece 想要的解决方案!!!继续查~~~~~~~

3. 服务器配置太低,需要优化 Mysql 和 php.ini

造成系统资源不够,这个倒是有可能。不过我买的是一个中等VPS,还带不起来一个日IP2000的博客吗?比较怀疑。所以直接 Pass 了这个方案,想尝试的问题自己搜索如何优化吧,项目实在太多了。有空 Forece 会写一篇文章详细介绍的。等不及的可以看下这篇文章

4. 创建脚本自动重启 MySQL 服务(治标不治本的方法)

创建脚本自动检测 MySQL 服务进程是否被 Kill,如果进程被杀,那么自动重启MySQL,虽然这个也管用,但是还是没有找到问题的最终所在,就是把我们之前的手动重启 MySQL 给变成自动化而已。

1
2
3
wget http://www.hostusvps.com/script/mysql_check.sh
crontab -e
*/3 * * * * /bin/bash /root/mysql_check.sh

这样的功能就是在定时每三分钟检测一次MYSQL的pid是否正常,如果不正常就执行定时脚本重启MYSQL。

5. 建立 Swap 分区(最终解决方案!)

咱们先了解一下什么是swap分区。swap分区即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。

其实说白了SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用。它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。

需要注意的是,虽然这个swap分区能够作为“虚拟”的内存,但它的速度比物理内存可是慢多了,因此如果需要更快的速度的话,并不能寄厚望于swap,最好的办法仍然是加大物理内存,swap分区只是临时的解决办法。

5.1 准备工作:

在设置 Swap 文件之前,有必要先检查一下系统里有没有既存的 Swap 文件。运行以下命令:
swapon -s
如果返回的信息概要是空的,则表示 Swap 文件不存在。

5.2 检查文件系统

在设置 Swap 文件之前,同样有必要检查一下文件系统,看看是否有足够的硬盘空间来设置 Swap 。运行以下命令:
df -hal
检查返回的信息,还剩余足够的硬盘空间即可。

5.3 增加swap交换文件

使用dd命令创建一个swap交换文件
dd if=/dev/zero of=/home/swap bs=1024 count=1024000
这样就建立一个/home/swap的分区文件,大小为1G。
这里要解释一下bs和count,bs为每个块的大小(byte),count为块数,交换文件的总大小就是bs*count

制作为swap格式文件:
mkswap /home/swap

再用swapon命令把这个文件分区挂载swap分区
/sbin/swapon /home/swap

我们用free -m命令看一下,发现已经有交换分区了。

但是重启系统后,swap分区又变成0了。
为防止重启后swap分区变成0,要修改/etc/fstab文件

vi /etc/fstab
在文件末尾(最后一行)加上

/home/swap swap swap default 0 0
这样就算重启系统,swap分区还是有的。

5.4 删除swap交换文件

如果因为特殊情况需要删除 swap 交换文件,那么请参考下方信息,否则请略过。

先停止swap分区

/sbin/swapoff /home/swap
删除swap分区文件

rm -rf /home/swap
删除自动挂载配置命令

vi /etc/fstab
删除/etc/fstab文件中的这一行

/home/swap swap swap default 0 0
这样就能把手动增加的交换文件删除了。

注意:
增加删除swap的操作只能使用root用户来操作。
装系统时分配的swap分区貌似删除不了。
swap分区一般为内存的2倍,但最大不超过2G

附录:以后遇到服务器错误基本排查方案

1.检查磁盘空间是否已满 排除硬性故障原因
有人说 MySQL 的日志经年累积可能会吃掉所有硬盘,所以可以禁用日志(不推荐),因为你就无法根据日志排除错误了啊。不过对于洁癖患者可以无视我的话。另外如果你一万年也不看日志的话,可以禁用这个日志功能。

vi /etc/my.cnf
找到log-bin=mysql-bin和binlog_format=mixed两行,在前面加#注释掉然后保存。接着

/etc/init.d/mysql restart
重启MYSQL生效。

cd /usr/local/mysql/var/
rm -rf mysql-bin.0*

删除掉mysql-bin.0000*之类的日志文件
这样,就可以解决MYSQL日志文件导致的硬盘占用过大的问题。

2.检查当前HTTP、SQL连接数是否正常 排除被攻击原因 (降低MySQL配置文件中的 max_connections 连接数请求)
3.检查程序数据配置文件 排除配置原因
4.检查日志文件

如果不知道日志文件在哪的话,那么去 /etc/my.cnf 查看 log 存放位置,如果你和 Forece 一样用的 LNMP 的话,那么你的 MySQL Log 存放地址应该是 /usr/local/mysql/var/主机名.err

然后用 vi 或者 vim 自行查看日志内容,也可以用 SFTP 下载在本机查看。

Kernal Log
/var/log/kern.log

ref:
http://www.marsitman.com/wordpress/wp_notconn_db.html
http://www.seoimo.com/wordpress-vps/

相关文章:

发表评论:

您的电子邮箱地址不会被公开。