解决WordPress下“Error establishing a database connection”问题(配置php-fpm)

0.

我站出现“Error establishing a database connection”这个问题很久了,一直也没有解决,每次重启一下就好了,一开始以为是JetPack插件的锅,因为他需要在一个网页授权什么东西,由于是wordpress出品,于是就信任了,后来不断出现这个error,推测是Jetpack的问题,遂卸载,结果症状好了一点,但还是出error,只不过频率低了。

1. Debug过程

首先Google了一下这个error,大多数都是说MySQL用户名和密码不对的,确认一遍用户名密码。

其中有一条说尝试登陆一下MySQL看一下error日志,结果登不上,继续Google MySQL登不上的问题,手动起动无效,lnmp下重启无效,尝试重启大法(整机),结果又能登陆了,可以初步确定问题出在MySQL。

后来又搜到说是不是内存不够了,键入 free -m 查看内存使用情况,发现剩余内存很多(刚重启过),暂停。

过了几天又出现error,在查看内存使用,剩余只有几十MB,当然跑不起来(但是为什么是MySQL先挂掉了而不是别的服务),搜了一招增大swap的方法缓解内存不足,实践后没什么明显效果,见上一篇文章 。

继续探索,这次使用了 top 命令查看资源使用情况,跟Windows下的任务管理器差不多,按 shift+P 按CPU使用排序,按 shift+M 按内存使用排序,如图:

其中:

PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进 程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称

终于破案了!可以看到世界上最好的语言的14个进程吃掉了70%+的内存!

可能世界上最好的语言只有世界上最好的服务器才配得上吧

2. 配置优化

既然定位到了问题就好办了,Google一下,修改配置文件php-fpm.conf,把 pm = dynamic 改为 pm = ondemand ,然后重启php就好了,重新看一下内存使用情况:

剩余内存从42MB增到了633MB,立竿见影~


参考:https://segmentfault.com/a/1190000010413463

Ubuntu增大swap(虚拟内存)大小

近期我站总是遇到“Error establishing a database connection”错误,重启后又可以重启访问,这个错误的具体分析会在另一篇文章中讲,尝试增大swap来解决问题。

1.查看内存使用情况

使用  free -m  命令:

可以看到swap只有255M

2.创建swap文件

我是在根目录下创建的swap,方便管理也好记

可以看到Linode的IO性能还是很不错的,能到438MB/S

把生成的文件转换成 Swap 文件:

sudo mkswap -f swap

把生成的swap 文件加入到系统中:

sudo swapon swap

查看分配情况:

free -m

成功增加了 1G ~


参考:http://blog.csdn.net/Demon_xiaochunjie/article/details/51441271

删除Let’s Encrypt下不需要的证书

有时候我们为了测试会用一个临时的域名来测试,比如test.toodyao.com,测试完成后也许会置之不理,但是在90天更新证书的时候总会有这个域名的失败提示,很不爽,而且lnmp下只提供add,没有del指令,遂手动删之。

1. 找到Let’s Encrypt的目录

对于lnmp安装的用户,目录在 /etc/letsencrypt

2. 删除

需要删除 live , archive , renewal 三个目录下你想删除的域名文件/目录,都是以域名命名

另外,如果没有更新证书的话,90天后会自动过期,过期前会有邮件提醒

参考:https://zhaodi.me/remove-domains-from-lets-encrypt-ssl-tls-certificate/

————

2018-3-1 更新

需要删除nginx下相应域名的vhost,否则在重启的时候,会提示找不到该域名的SSL文件而启动失败,如下:

如果使用的是lnmp,直接键入 lnmp vhost del ,然后键入你想删除的域名即可

nginx关闭的时候SSR竟然也用不了,奇怪

成功为本站添加了Let’s Encrypt的https支持√ 附教程

之前一个二级域名ss.toodyao.com一直无法访问,以为是被捯饬坏了,后来试遍无数方法,nginx.conf都快背下来了,之后发现是域名被墙了x

因为本站可以上,而且还在同一个服务器下,所以完全没想到会是域名被墙。

被墙大概分这么几个级别:

不同情况不一样,程度依次加重
1 、仅仅是 ip 被墙→换 ip
2 、域名被 url 重置→上 https
3 、域名被国家出口 dns 污染→用国内 dns ,备案回国
4 、域名被省级 dns 污染→能到这程度不是一般人,收拾收拾投案自首吧

来源:V2EX

IP被墙经常遇到,这样看来ss.toodyao.com的情况应该是第二种,而且上https是早晚的事儿,之前嫌麻烦一直没用https,看到lnmp 1.4支持安装SSL证书后,决定上https。(添加https之后真的没被墙了)

以上是扯闲篇

下面是正文

0. 准备

  • 你的服务器
  • 相关知识

1. 安装/升级lnmp 1.4

为了方便用了lnmp自带的SSL安装功能

安装lnmp 1.4:

详细安装过程请参考:https://lnmp.org/install.html

如果你以前安装了lnmp 1.x版本,需升级到lnmp 1.4:

2. 添加SSL

使用 lnmp ssl add 来为你的站点添加SSL

输入相关信息如你的域名,根目录,URL重写的支持,日志等,之后选择2,使用Let’s Encrypt的SSL证书,接下来输入你的邮箱,等待相关安装完毕,重启nginx

3. 301重定向

需要将http访问重定向至https

找到你的nginx配置文件,如lnmp中为 /usr/local/nginx/conf/ ,各个虚拟主机的配置文件在 vhost 目录下,找到你域名的配置文件,或使用 nginx -t 校验命令查看配置文件的地址

在你的nginx配置文件中添加:

nginx -s reload 重载配置使其生效

4. 对WordPress的配置

如果是普通的网站,这是已经可以看到右上角绿色的小锁了,

对于WordPress站点来说,还要为图片、CSS、JS等元素添加SSL支持,才算是支持全站https

进入WordPress仪表盘->设置->常规,将WordPress地址和站点地址都加上 https://

保存后刷新主页,如果还没有小绿锁的话,可以打开网页源代码, Ctrl+F 查找 http ,仔细排查,比如导航栏上的自定义URL,未更新的站内图片,或者非https的外链图片等,并逐个修改。

5.  验证

有小绿锁啦~O(∩_∩)O~~

启用了新域名和新服务器

上了大学终于有时间捯饬这些远方的苟且了,14年开始玩WordPress到现在都没有正经的写过一篇文章。

买了新域名:toodyao.com,更具识别性,原来的qvge.com弃用。

还开了新的VPS,Linode的内存升级计划6个月前就开始了(大概是高考那会儿,孤陋寡闻的我暑假才知道),然而Tokyo节点一直是售罄状态,等到现在也没升级成功,好在Linode在2016年底新开了Tokyo 2节点,干脆直接将VPS迁到了新的节点,用上了2G内存。

高中的时候搭建的Shadowsocks每个月流量都用不到1%,这么多流量没用完好像很可惜的样子,手动分给了一部分同学用(哪里有一部分,好像只有2个吧喂),还是用不到1%,一直在想怎么方便地分给大家用,如今借助ss-panel和shadowsocks manyuser终于实现了,放在ss.toodyao.com,欢迎大家使用,好用记得推荐给同学。

考虑到有些同学可能不会用Shadowsocks,正在写教程,争取早日上线。

新的一年希望网站有更多访问量。

还要多学习。