刚好是到期才换了服务器并且使用wordpress + sakurairo重新建站,所以有一台快到期的旧服务器。所以打算实战一下如果网站炸了如何利用备份进行恢复。现在假设当前站炸了,而这台旧服务器是重装后用来恢复的新服务器——开始备份恢复实战~
准备工作
正常登录新服务器,修改ssh等配置进行免密登录。
安装必须的内容。在此之前,进行更新:运行sudo apt-get update
。不更新真的会出问题。
nginx
先安装nginx,确保公网能正常连接服务器吧。还是贴上nginx安装参考链接。
安装命令:apt-get install nginx
配置文件等之后php等配好了再配置,否则出现严重安全问题——无法解析php后端。
MySQL
还是附上mysql安装参考链接。
安装命令:sudo apt install mysql-server -y
注意-y
参数!此处,如果安装时没有加-y
指令需要自己重新配置root密码。使用vim查看:vim /etc/mysql/debian.cnf
,在这个文件里面可以看到deian-sys-maint
的账户和密码,用这个登录,然后自己维护root密码。所以,如果不消息没加,还是卸载重装更方便。
贴心的放一下卸载方法吧:sudo apt purge mysql-server
,这里apt-get purge 与 apt-get remove是不同的,简单来说:remove仅可以删除包,但不会删除配置文件;purge可以将包以及软件的配置文件全部删除。
配置新密码(注意下面注释中的版本,使用对应版本的命令):
# 登录mysql,在默认安装时如果没有让我们设置密码,则直接回车就能登录成功。
mysql -uroot -p
# 设置密码 mysql8.0
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
# 设置密码 mysql5.7
set password=password('新密码');
# 配置IP 5.7
grant all privileges on *.* to root@"%" identified by "密码";
# 刷新缓存
flush privileges;
然后需要修改配置文件。注意:配置8.0版本参考:我这里通过这种方式没有实现所有IP都能访问;我是通过直接修改配置文件才实现的,MySQL8.0版本把配置文件 my.cnf
拆分成mysql.cnf
和mysqld.cnf
,我们需要修改的是mysqld.cnf
文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
修改 bind-address
,保存后重启MySQL即可;这里没有修改mysqlx-bind-address
,他还是127.0.0.1
。
bind-address = 0.0.0.0
重启MySQL重新加载一下配置:sudo systemctl restart mysql
然后新建供wordpress使用的用户,这里也有一个官方wiki提供的参考。
$ mysql -u root -p
Enter password:
mysql> CREATE DATABASE db_wordpress;
mysql> CREATE USER "wordpressusername"@"hostname" IDENTIFIED BY "password";
mysql> GRANT ALL PRIVILEGES ON db_wordpress.* TO "wordpressusername"@"hostname";
mysql> FLUSH PRIVILEGES;
PHP
还需要安装php-fpm。参考的这一篇。此处--no-install-recommends
参数是为了不安装诸如Apache等推荐安装的玩意,根据自己情况选择。
sudo apt install --no-install-recommends php8.1
sudo apt install php8.1-fpm
然后,特别注意配置nginx。我记得当初重建网站时这花了很长时间,最后还是ChatGPT解决的。主要就是把nginx代理到的php文件交给后端解析,主要需要做的就是正确修改nginx配置。然而nginx配置我们是备份好的,直接用就行了。
安装mysql的插件:
sudo apt install php8.1-mysqli
重启后端fdm:
sudo systemctl restart php8.1-fpm
安装额外的环境依赖
旧的服务器还可能安装了额外的环境依赖,此时必须在新服务器恢复必要的环境。如果你是刚刚安装wordpress,那么到后台的站点健康里面,应该是可以看到一些提示:“警告 可选的模组 xxx 未被安装或已被禁用。”而现在是备份的网站,你甚至可能无法登录——因为主题(比如本站使用的sakurairo主题)所依赖的环境未被正确安装。这里列出本次实战中遇到的依赖,不安装这些是无法正常打开的。
sudo apt install php8.1-gd php8.1-curl php8.1-xml php8.1-imagick php8.1-mbstring php8.1-zip php8.1-intl
或者直接安装默认版本而不指定版本:
sudo apt install php-gd php-curl php-xml php-imagick php-mbstring php-zip php-intl
- php-gd: 提供图像处理功能,用于生成和处理图片。
- php-curl: 支持通过 cURL 库发送 HTTP 请求,用于与外部 API 交互。
- php-xml: 提供处理 XML 数据的功能,用于解析和生成 XML 文件。
- php-imagick: 提供与 ImageMagick 集成的图像处理功能,支持多种图像格式。
- php-mbstring: 提供多字节字符串处理功能,适用于处理非英文字符集。
- php-zip: 提供对 ZIP 文件的压缩和解压功能。
- php-intl: 提供国际化支持,用于处理语言和区域相关的功能。
用备份包恢复
解压备份包的命令:unzip ./xxx.zip
,如果想指定位置就加上-d
参数,不过橘子的备份一般会套一个文件夹所以都不会有这种问题:
unzip ./xxx.zip -d ./backup/
恢复MySQL数据库
使用如下命令导入备份的.sql
文件:
mysql -u wordpressusername -p db_wordpress < /path/to/backup.sql
(可选)接下来可以登录到数据库看一下数据都写入进来没有:
mysql -u wordpressusername -p db_wordpress
SHOW TABLES;
SELECT * FROM wp_users LIMIT 5;
恢复wordpress文件
由于我们的备份是直接复制,所以恢复也直接复制:
cp -r ./backup/xxx/html/ /var/www/example.com/
注意这里指定了source的html文件夹,复制到父文件夹下的html文件。复制完还是检查一下路径吧,根据实际情况调整。
复制完毕后一定要修改权限信息,否则wordpress无法读取、写入、修改一些文件。这个可以用自己的解决方法,我的方法是将ubuntu用户加入www-data的用户组,并让ubuntu用户持有这些文件,让组内用户均可以读写执行,如下:
# 把ubuntu加入组 www-data 中
sudo usermod -a -G www-data ubuntu
# 检查ubuntu用户都在哪些组里(注意不是ubuntu组的成员)
groups ubuntu
sudo chown -R ubuntu:www-data /var/www/example.com/html
cd /var/www/example.com/html/
find ./ -type d -exec chmod 664 {} \;
# 或者权限更高一点
find ./ -type d -exec chmod 775 {} \;
下面是对命令各部分的详细解释:
find ./
:
find
:是一个用于在文件系统中查找文件的命令。./
:表示查找当前目录(也可以是其他目录路径)。在这里,./
表示从当前工作目录开始查找。-type f
:
-type
:这是一个选项,用于指定查找文件的类型。f
:表示查找的是普通文件(不是目录、符号链接等其他类型的文件)。所以这个命令只会查找当前目录及子目录下的普通文件,而不会包括目录或其他类型的文件。-exec chmod 664 {} \;
:
-exec
:这个选项允许你对find
命令查找到的每一个文件执行一个指定的命令。在这个命令中,我们使用chmod
命令修改文件权限。chmod
是用来修改文件权限的命令。664 是一个权限数字表示法。
6
:表示文件所有者的权限是读(r)和写(w),即rw-
。6
:表示文件所属组的权限是读(r)和写(w),即rw-
。4
:表示其他用户的权限是读(r),即r--
。{}
:这个占位符代表find
命令查找到的每个文件。对于每个查找到的文件,find
会将文件路径替换到{}
位置,chmod
命令就会作用到每个文件上。\;
:这是-exec
命令的结尾。由于;
是一个特殊字符(在 shell 中用于表示命令结束),需要用反斜杠\
来转义它,告诉 shell 这是命令的结束符。
此外,如下命令可以修改单个文件夹下的php文件的权限,但是不会递归查找子文件夹下的文件。
sudo chmod 664 /var/www/example.com/html/*.php
恢复nginx代理配置
复制网站SSL秘钥到指定路径!
复制自己备份的nginx文件,使用ln
命令做软链接,重启nginx让它生效。
sudo ln -s /home/ubuntu/nginx_config/http.conf /etc/nginx/sites-available
sudo ln -s /home/ubuntu/nginx_config/http.conf /etc/nginx/sites-enabled
特别注意事项
关于域名
如果你是需要更换域名,那么上述方案中存在一个问题:之前的备份中必然存储的是旧的域名,所以直接将它在服务器上解压后,其域名等内容没有改变。类似于Sakurairo主题的登录页面,是通过固定链接来做跳转的,这就导致恢复备份后,其跳转的是指定的登录链接。
例如,原来持有域名old.com,现在这个服务器炸了,买了一个新域名new.com(emm,为什么服务器炸了要买新域名?(⊙o⊙) 嘛,就是假定一个换域名的场景)现在在new.com的服务器上进行备份恢复,然后访问new.com,它的登录页面可能会重定向到旧的网页old.com。所以,上述备份恢复方法最好保证域名的解析是固定不变的,就不会有什么问题。
关于网站出错
恢复备份时可能会收到这样的邮件(前提是正常配置了邮件发送功能并且在新的服务器上该功能还没有寄掉):
您好:
WordPress 从版本 5.2 开始,能够检测到您站点上的插件或主题造成了致命错误,并向您发送自动的通知邮件。
这次,WordPress 发现了您的主题造成的错误:桜いろ。
首先,访问您的站点(https://www.example.com/ )并查看有无可见的问题。然后,访问发生错误的页面(https://www.example.com/wp-login.php?redirect_to=https%3A%2F%2Fold.example.com )并查看有无问题。
请联系您的主机提供商来获得帮助及解决此问题。
如果您的站点看上去不正常,且您不能正常访问仪表盘,WordPress 现在有了特殊的「恢复模式」,能够让您安全地登录仪表盘并检查问题。
https://www.example.com/wp-login.php?action=enter_recovery_mode&rm_token=xxxxxxxxxx&rm_key=xxxxxxxxxxxx
为了保障您的站点安全,此链接将在 1 天 后过期。请不用担心,如果在此之后错误再度发生,我们将向您发送新的链接。
在寻求关于此问题的帮助时,您可能需要提供以下信息:
……
wordpress这一点挺好的,还给了一个恢复链接,通过这个链接就可以连接到后台,而无需通过主题的接口登录到后台。
Comments NOTHING