虽然可能只有几个人知道本站曾经从昨天零点到现在有一段时间的关闭感伤时间,但现在已经复活了。
以下是详细的复活过程——
备份准备
大概是 8 月 1 日的时候,阿里云发邮件来和我说我的学生机还剩下 10 天就过期了,让我续费。
然后我看到这个续费价格就完全失去了续费的欲望。
但是毕竟这个博客运营了也挺久的了,从 18 年到现在,虽然也写了很多废话,但对我来说还是有很多值得纪念的东西的,所以还是得想办法做做备份,免得停机了整个博客就直接没了。
我思考了一下,想出来以下三种备份方案
WordPress 插件备份
只要在咕果上搜索「WordPress」备份,大多数都会推荐使用插件备份。虽然不清楚原理,但貌似看过程还蛮简单,无非就是插件导出一个备份包,使用的时候再用同样的插件把备份包导进去就行了。
我使用了 WPvivid 作为我的备份插件,操作也非常傻瓜,选好了自己想要备份的内容后,点「Backup Now」就可以直接进行备份,把备份包导出到指定的文件夹里了。
之后通过 ftp 或者 scp 之类的工具从服务器下载到自己的电脑即可。
但最终我没有使用这种方法。
源文件备份
总所周知,WordPress 是用 php 写的。要使一个 WordPress 博客能够正常展示,需要以下工具:
- http 服务器,一般是 Apache 或者 Nginx,我现在用的是 Nginx。
- php 环境,和 php-fpm(用于支持 fastcgi,不然没法配合服务器进行工作)。
- 数据库,一般用 mysql。
- WordPress 的本体,各种 php 文件。
这四个少了其中一个都没法正常工作,php 环境和 http 服务器改一下配置就可以无痛迁移,WordPress 本体里面主要保存一些和 WordPress 相关的一些设置,还有插件和主题等,这些反倒不是特别重要,但是 WordPress 的评论和博文都是存在数据库里的,可以说数据库是最需要备份的一部分。
所以我有一个很蠢的想法:把 mysql 和 WordPress 本体文件夹全部保存下来就行了。
一开始本来是想着用 ftp 进行文件传输的,但我不得不说,vsftpd 真的太他妈难用了!配了很久,才知道怎么用本来就有的用户登录 ftp。好不容易登录上了,用 cyberduck 下载文件的时候又完全没速度,一直停留在 0B/s,我只能直呼牛逼。
到最后我也懒得排查究竟是什么问题了,直接一把梭用 scp 下载文件,本以为会很麻烦,但加上 -r 参数后反而可以直接像 cp 命令一样方便地进行下载,不仅传输过程安全,速度还跑满了!对比起来 ftp 简直就是垃圾好吧
但,虽说是跑满了,这个傻逼服务器的带宽也就只有 1Mbps 而已,也就是说,跑满了也就只有 128 KB/s 左右的速度。而 WordPress 本体有 500MB,mysql 本体加上数据库更是高达 3.2 GB,按照这个小水管的速度,我得让电脑不休眠挂个 9 小时才能全部导出完毕。
其实 9 小时也不算多,但我意识到这件事的时候,距离零点已经不足 3 个小时了。虽然直接备份 WordPress 本体文件夹是够的,但是备份整个 mysql 目录是不可能行得通的。
正当我着急的时候,我们的小斌同学(@Shellbin)给了我一个非常好用的东西!
phpMyAdmin 其实就是提供了一个对 mysql 的 web 操作界面,本质上和 Navicat 等 mysql 客户端是一样的。这东西支持导出 mysql 的数据库内容,实际上就是把数据库的内容导出为 sql 语句,导出的文件是一个纯文本,而纯文本内容占用的空间是很小的(虽然也要看数据库内容大小,但一般都不会很大)。
所以这样我就可以获得一个体积又小,数据又完整的备份!
首先,去 phpMyAdmin 的官网把 phpMyAdmin 的本体下载下来(下文简称PMA),解压到 WordPress 的文件夹里面去,例如:
/home/www/htdocs ( WordPress 的本体目录)
└── phpmyadmin
然后按照 这里 说的方式配置好数据库相关的一些设置。
然后,输入 https://你的域名/phpmyadmin
即可进入到 PMA。
但对我来说一切都没有那么顺利,一打开就立刻飚红了。
后来查了一下,是文件权限的这里,例如这里提示 /var/lib/php/session
的权限被拒绝,那就心狠一点直接 sudo chmod -R 777 /var/lib/php/session
就行。虽然可能只需要读和执行权限(不然进不了文件夹),但反正之后也不用了,直接 777 省事(
给够权限之后,就可以正常进入到 PMA 的页面了。
选取 wordpress
数据库里的所有 wp_
开头的数据表,点击上面的导出,除了编码设置为 utf-8 之外其他的什么都不要动,原样导出,这样就能得到一个 .sql 文件。
到这里,数据库内容的备份就结束了。
而因为 WordPress 本体只有 500 多 M,删掉一些没用的内容再进行 gzip 压缩,可以减少体积到 250M 左右,用了半小时左右就下好了。
到此,对 WordPress 本体和数据库内容的备份就完成了。
但是!我忘记备份了 nginx!这导致了我之后弄配置啥的都得重新来,如果有同样需求的同学,请记得一定要连着服务器的配置一起备份,别弄得到时候忘记原本服务器是怎么配置的了(泪
PDF 或者 HTML 备份
这里是考虑到如果上两个方法都失效的话,至少我要保留一个可供正常阅读的文件归档,不至于让损失过于惨重。
所以最好的办法就是导出为 pdf,或者导出为 HTML 单页面。
前者很简单,直接 cmd + P 或者右键打印保存为 pdf 就好,后者的话,需要安装 SingleFile 这个插件。
因为 SingleFile 在导出的过程中非——常——慢,一个页面大概要几分钟才可以保存完,而当时距离零点只剩下一个小时左右了,所以除了一些比较重要详细的内容我保存了 HTML 之外,其他的一律保存为 pdf。
目前被保存的内容已经上传至了 github 仓库。(不过既然博客都恢复了,应该就用不上了吧)
迁移到新服务器
购置服务器
还是要继续感谢我们的小斌同学(@Shellbin),给我推荐了一个可用的方案:去买阿里云的贫穷乞丐机。
最后,在深夜的冲动之下,我把云盘加到了 40G,用了 744 人民币(含税)的价格买下了这个新的乞丐服务器的 5 年使用权。
单核,512M,简直就是贫穷的代名词……
增加新用户
服务器到手之后,安装系统阿里云会自动帮忙装,所以这一步不需要我们进行操作,只需要选好系统版本就行了,我这里还是老样子用的 CentOS 7.9。
没办法,太穷了,用不起资源占用高的系统。
阿里云默认只会给一个 root 用户,但我们平时使用服务器的时候一直披着 root 的皮进行操作也太危险了,所以还得新建一个拥有 sudo 权限的用户,平时就用这个用户进行操作。
如何新增一个用户以及如何给用户增加 sudo 权限都写的很清楚了,按照这个来做就 ok。
安装 MySQL
我是参考 Linux安装WordPress搭建网站 – SegmentFault 思否 里面安装 MySQL 的部分来安装的。
因为我原本的数据库名字就叫 wordpress,为了方便不用改各种奇怪的配置,新的数据库名字也叫 wordpress,如果你和我一下,按照上面那个教程里面说的来就行。如果想叫别的名字,
>create database wordpress;
这里把 wordpress 改成你想要的名字就好。
然后之前备份的 wordpress.sql 文件就派上用场了,MySQL 导入数据 | 菜鸟教程 (runoob.com) 这里有说明如何用 source 命令导入 sql,按照这个来就行。
我这边的话,mysql 命令是这样的:
mysql> source /home/shun/wordpress.sql
导入完成后,MySQL 这里的配置就基本结束了。
Linux 上的 MySQL 配置文件基本都是 /etc/my.cnf
。在这里可以看到 MySQL 的各种配置,可以看到 MySQL 在 Listen 的接口或者 Socket 是哪一个。我这里的 MySQL 使用的是 Socke,位置在 /var/lib/mysql/mysql.sock
,这个要记住,等下要用到。
MySQL 可以 Listen 网络的 Socket,也可以 Listen 本地的 Socket 文件,有可能两个同时 Listen,默认端口是 3306,可以通过 netstat -lnp | grep mysql
来查看 mysql Listen 了哪些 Socket,可能同时 Listen 了 Socket 文件和网络的 ip:port。
(-l :正在 Listening 的 Socket,-n :显示 ip 和 port,-p :显示对应的程序)
放置 WordPress 本体
WordPress 官网提供的官方方式是提供一个 .tar.gz 包,解压之后随便放一个地方就可以运行,所以 WordPress 其实并不会有什么额外的依赖关系和配置关系,备份中我们保存下来的 WordPress 本体也是如此,直接随便放一个文件夹就可以直接拿来使用了。肥肠方便,在这里,我就放在了上一步新建的用户 shun 的 home 目录里,也就是说 /home/shun/wp
就是新服务器上 WordPress 本体的位置。
到这里,WordPress 本体的放置就结束了。
然后需要设置 WordPress 本体连接到数据库的方式,打开 WordPress 本体文件夹,打开 wp-config.php,主要修改这几个内容:
// ** MySQL settings - You can get this info from your web host ** //
// 数据库的名字,我这里是 wordpress,输入在安装 MySQL 并创建数据库的那个数据库名字
define('DB_NAME', 'database_name_here');
// MySQL 的用户名,我这里是 root
define('DB_USER', 'username_here');
// MySQL 用户对应的密码
define('DB_PASSWORD', 'password_here');
// MySQL 连接到数据库的方式
// 可以指定用哪个 socket 文件
// define('DB_HOST', 'localhost:/var/lib/mysql/mysql.sock');
// 也可以用 ip:port 的方式,默认端口为3306,如果是默认不写也行
// define('DB_HOST', '127.0.0.1:3306');
// 如果只写了 localhost 这种方式,则会使用 php.ini 中指定的 mysqli.default_socket 进行连接
define('DB_HOST', 'localhost');
// 数据库的字符集,一般都是utf8
define('DB_CHARSET', 'utf8');
到这里,WordPress 本体相关的配置就完了。
安装并配置 php 7.4
在之前的文章:
里面有提到:我当时的安装参考方法已经忘了,上网现搜了一个:快如闪电的安装php7.4套件(centos 7) | PHP 技术论坛 (learnku.com),应该也是一样的。
没想到我居然有一天会被自己的文章给救到,因为我用的是 CentOS 7.9,所以刚好适用这个教程,只要执行到 安装 php(centos 7) 这一部分就行了。下面的安装 Nginx 和 MySQL 可以自己另外装。
装好之后,php-fpm 的服务名叫 php74-php-fpm
。想要启动的话,执行 service php74-php-fpm start
就行。这样就启动了 php-fpm 的监听 server。
至于 php.ini 还有 php-fpm 的配置之类的,多用一下 find 命令搜一下吧, find / -iregex '.*php.*'
啥的,总能找到((
这里不需要做额外的配置。
我来帮你完成新数据库的第一次插入操作吧
啊,看来本文正文才是第一次(躲
明天上班了(痛哭).mp4