今年开年时遇到了地震、飞机撞击等灾难,我这个站点也遇到了灾难:因为升级导致服务器坏了,所以也要搞“灾后重建”。
因 CentOS 升级导致机器毁灭
众所周知 CentOS 7 在今年 6 月底就停止支持了,我原先的设想是先切换到 Oracle Linux 7,然后用 leapp 升级到 Oracle Linux 8。第一步 CentOS 7 切换到 Oracle Linux 7 成功了,但是第二步 Oracle Linux 7 升级到 Oracle Linux 8 失败了,重启之后无法开机。因此只好重新新建一个 VPS 了,这次选择了 Ubuntu 22.04 LTS。
MySQL 数据库问题
虽然原来的 VPS 系统坏了,但是硬盘可以挂载到新的 VPS 上,文件都能复制出来。可是 MySQL 数据库只剩下了二进制文件,版本还不一样,无法还原。最后采用的是曲线救国的 ManageWP 方案。
以前我曾经找过 wordpress 增量备份插件但一直没有合适的(全部都很贵)。最后选择了 ManageWP 的免费每月底备份方案。恰好出问题的是月初,上个月底有备份,可以下载备份好的 SQL 文件,只是损失月初的几条评论而已,还算 OK 了。代价是需要付 0.1 美元。
可惜 ManageWP 备份结果里面不支持 emoji 字符,偏偏我又是 emoji 字符爱好者。所有的 emoji 字符都被替换成了四个问号。对于文章里面的 emoji 字符我自己进行了手动重写,对于评论里面的 emoji 字符只好保留了乱码。抱歉🙇
插件问题
刚重新安装好之后就出现诡异的现象:后台能够进去,前端却始终显示:您的站点遇到了一个严重错误。后来开启了 WP_DEBUG 之后,就能显示问题的细节了,代码来自于一个插件。试着删除这个插件就好了。
文件权限问题
我知道 http 进程会往 wp-content 目录里面写东西,所以我已经把 wp-content 目录的所有者设置成了 nobody 和 nogroup。结果在后台尝试删除插件时出现了诡异的提示:操作正在请求 FTP 权限,请输入 FTP 的用户名和密码。
OMG😦!我从来没记得现在搭 wordpress 还需要设置 FTP 啊!谁都知道 FTP 极不安全,现在 Oracle VPS 都是 ssh-key 认证,都不用密码的。后来网上搜了好久才发现问题出在:只设置 wp-content 目录的权限是不够的,要设置整个 html 目录为 http 进程可写入才行。
虽然有点奇怪,但是想想也有道理,如果其他文件 http 不可写的话,wordpress 怎么进行后台更新呢?
SSL(HTTPS) 问题
大部分都解决了,却剩下最后一个难以解决的问题:LiteSpeed Cache 爬虫一直不正常,总是显示全部为蓝色(即 missing),虽然我保证服务器的 IP 地址设置是正确的。
在 wordpress forum 里面 和开发者沟通了好几轮才知道,原来问题出在 CloudFlare 上。自从博客被墙之后,我就直接开启了 CloudFlare。因为 CloudFlare 自带 SSL(HTTPS),所以这次重建时我就没有在源服务器上搭建 HTTPS(因为麻烦啊,而且没必要)。然而恰恰就是那么巧,LiteSpeed Cache 爬虫是需要绕过 CF 直接在本地爬 URL 的,所以还是需要搭建 HTTPS。方法依旧依照之前的 certbot 文章。
友情链接问题(感谢某网友反馈)
打开友情链接页面直接卡死。查询服务器 log 发现
[80739] [T0] [xxx.xxx.xxx.xxx:41496-1#blog] [STDERR] PHP Warning: getimagesize(https://dn-qiniu-avatar.qbox.me/avatar/5ba655c9abcbd5f81a3ce0d1a88dc568): Failed to open stream: Connection timed out in /xxx/xxx/xxx/blog/html/wp-content/plugins/litespeed-cache/src/media.cls.php on line 734\n
把这个信息拿到网上搜索,发现原来是 php 版本太新的问题。解决方法是加入 litespeed_media_ignore_remote_missing_sizes 这个 filter。
备份问题
Oracle VPS 是免费的,好像没有官方的快照功能。这次因为没有备份吃了苦头(ManageWP 备份不方便),所以接下去如何搞增量备份是个问题。初步的想法是建一个新的实例,两者之间用 rsync 进行同步(因为是 Oracle 内网,同步很快。MySQL 数据库也可以利用 Percona-XtraBackup 转成文件之后进行增量备份)。这个内容后面再尝试。现在才发现,虽然这个博客写了 14 年,但是 MySQL 完整地 dump 一次才 2 MB (gzip)左右,搞什么增量备份啊!于是改成了每天 cron 任务完整 dump 一次。至于其他文件不用担心,Oracle 硬盘一直都在不会坏。
我很重视与大家的留言互动,不仅是为了维持关系,更重要的是留言也是测试数据写入和消息发送的好手段!欢迎大家多来吼吼!

我前阵子才申请到了免费的甲骨文,虽然不升级申请不到arm机器,但是也足够使用了。 🙂
恭喜,确实免费的够用了
之前一直都是abc的,但是前阵子本着再试下的心态,结果申请成功了。
这段时间测试了很久,比我花钱购买测试用的CC速度还要快一点。
不知为什么,验证码我刷新多次才能回复。
升级以前一定要先备份,一定要备份。
【操作正在请求 FTP 权限,请输入 FTP 的用户名和密码。】 这个一般是权限问题,一个命令就可以解决 chown -R www:www /网站文件目录
是的,备份很重要。
我是 litespeed 服务器,所以用户名不是 www,是 nobody:nogroup
文件权限用chown 命令即可。想备份的话定期手动导出下数据库就行了。
emoji本質上也是一個unicode字符,很多導出數據庫的服務,都沒有支持到4字節的字符,就包括中文ext-b往後的字符也都會變成????。
所以為了保證包括表情在內的字符能正常保留,我一般都自己導出。據悉是較新的mysql才支持直接把emoji當一般字符寫入,以前的不支持。
在2022年11月,我也經歷過一次emoji變????,真是災難啊。當時也是需要回溯幾日。還有幾位朋友那個時段在評論區出沒。我的解決辦法是將不同版本的數據表合併。
感謝分享。我現在用本地的 mysqldump 就沒問題,裡面正常容納 emoji。
俺也一样用龟壳搭建的~
原来你们把 Oracle 叫做龟壳 😝
早几天打不开,以为是流量超过上限导致。
我这种被墙掉的简体中文网站不太可能出现什么流量超上限的,一般都是无人问津。