文章引用至SEOIMO
网站备份的重要性就不需要博主多说了。在Linux系统下,对WordPress进行备份其实并不难。主要涉及两部分:文件备份和数据库备份。
WordPress备份、还原/恢复以及搬家/迁移教程,可参看 WordPress备份 一文 ,以下可自行略过。
文件备份
温馨提示:以下命令中涉及的数据库和域名,请根据你VPS上具体设置,自行修改。
为了方便管理,我们先建立一个文件夹专门存放备份数据,比如 /home/backup/ :
以本站所在文件夹 seoimo.com 为例,压缩整站并移动到 /home/backup/ 文件夹下(为方便管理,博主添加了备份日期):
# tar -zcf seoimo.com-20171001.tar.gz seoimo.com
# mv seoimo.com-20171001.tar.gz /home/backup/
好了,整站已经打包备份完成。接下来,开始备份数据库。
数据库备份
首先,打开 /home/backup/ 文件夹,我们需要将数据库备份在这里:
# lnmp database list
输入 root 数据库密码(在#6 + 搭建LAMP环境设置的),即可查看当前数据库列表。
选择需要备份网站的对应数据库,以选定 sjk_seoimo 为例:
再次输入数据库密码,即可完成数据库备份。
可键入命令 # ls 查看当前目录下已经存在了备份好的文件。
此时,可以用通过 FTP 下载到本地保存,也可上传到别的 VPS 上备份保存。
WordPress迁移 / 搬家
某些情况下,我们可能需要进行网站迁移,从一个VPS搬家到另一个VPS上。如果是没有开通 SSH 功能的虚拟主机,搬家起来可能会比较麻烦,来来回回的下载和上传。但是,在VPS上操作则相对简单的多。
假设新VPS的IP为 8.8.8.8,SSH端口为 22,则打开备份目录,选择需要的文件备份和数据库备份上传:
# ls
# scp -P 22 seoimo.com-20171001.tar.gz root@8.8.8.8:/home/backup
# scp -P 22 sjk_seoimo-20171001.sql root@8.8.8.8:/home/backup
回车后,按要求输入新的VPS登陆密码。
接下来,SSH登入新的VPS。然后解压或替换网站域名目录:
# cd /home/wwwroot
# tar -zxf seoimo.com-20171001.tar.gz
# rm -rf seoimo.com-20171001.tar.gz
搬家后解压的文件可能存在权限的问题,建议赋予网站根目录文件的可写权限。
# chown -R www /home/wwwroot/seoimo.com
之后,导入数据库,仍以 sjk_seoimo 为例:
# ls
# mysql -uroot -p sjk_seoimo < sjk_seoimo-20171001.sql
倘若虚拟主机转虚拟主机,或者虚拟主机转VPS,数据库密码和某些插件文件路径可能不同,这就需要额外去查找更改了。
但如果都是在VPS上通过LNMP搭建WordPress,通常则无需再做额外操作。
注意:如果网站开启了 HTTPS 访问,且是安装的 Let’s Encrypt 提供的免费SSL证书,那么除了上面的操作之外,还需要使用命令 # lnmp ssl add 再重新添加SSL证书。
温馨提示数据库的导出用的符号是 “>”,导入用的是 “<";注意方向,千万别搞错了。
WordPress搬家脚本(参考)
1
此脚本适用于LNMP1.4版本,并使用Certbot程序更新Let’s Encrypt证书。因此,较为复杂并且可能出错。新手的话还是按照笨方法按部就班的搬家吧!
但是,下文的搬家思路和某些命令,都是通用的,懂点基础的可以作为参考。
如果你像博主一样,厌倦了每次搬家都要一遍一遍的执行压缩、传输、解压以及添加网站等操作,尤其是当VPS上有多个域名时。那么,这里有个高(偷)效(懒)的方法。
博主写了一个自动迁移WordPress的Shell脚本(WP-Migration),在你新的VPS执行就可以。但前提是你的新旧两个VPS系统最好一致,比如同为CentOS6.x或者CentOS7.x。否则,可能出现未知的问题(博主猜测)。
优点:不需要用lnmp命令提前添加好域名和数据库,全部从旧的VPS上直接复制。
博主水平有限,Linux勉强算是入门。故而把源码贴在下面,也希望有路过的大神能提点意见和建议。
脚本源码:
# ====================================
# Name: WP-Migration by SEOIMO
# Link: https://www.seoimo.com/wordpress-vps/
# Date: 2018-03-01
# ====================================
# 记录程序起始时间
echo “[Starting time: `date +’%Y-%m-%d %H:%M:%S’`]”
time_start=$(date +%s)
# 停止lnmp
lnmp stop
# 输入旧的VPS地址和端口
read -p “Please enter your Old VPS IP (e.g. 58.58.58.58): ” old_vps_ip
read -p “Please enter your Old VPS SSH Port (e.g. 58585): ” old_ssh_port
# 迁移旧的VPS上添加的[所有]网站/域名(形如:xxx.com)
echo -e “\033[32;49;1m[#1 Copy the WWWROOT files from your Old VPS now.]\033[39;49;0m”
scp -P $old_ssh_port -rC root@$old_vps_ip:/home/wwwroot/*.com /home/wwwroot/
# 更改网站权限
chmod -R 755 /home/wwwroot
chown -R www /home/wwwroot
# 迁移旧的VPS上添加的[所有]网站的数据库(先备份本机数据库)
echo -e “\033[32;49;1m[#2 Copy the DATABASE files from your Old VPS now.]\033[39;49;0m”
cp -r /usr/local/mysql/var /usr/local/mysql/var.old
scp -P $old_ssh_port -rC root@$old_vps_ip:/usr/local/mysql/var/ /usr/local/mysql/
# 更改数据库权限
chown -R mysql:mysql /usr/local/mysql/var
# 迁移旧的VPS上Apache中绑定的[所有]域名设置(先备份本机域名设置)
echo -e “\033[32;49;1m[#3 Copy the HTTPD files from your Old VPS now.]\033[39;49;0m”
cp -r /usr/local/apache/conf /usr/local/apache/conf.old
scp -P $old_ssh_port -rC root@$old_vps_ip:/usr/local/apache/conf/ /usr/local/apache/
# 旧的VPS上网站是否启用了Let’s Encrypt免费的SSL证书
echo -e “\033[32;49;1m[#4 Copy the Let’s Encrypt files from your Old VPS now.]\033[39;49;0m”
read -p “Did you set up the Let’s Encrypt SSL in your Old VPS before? (yes or no): ” letsencrypt
if [ “$letsencrypt” = “yes” ] || [ “$letsencrypt” = “y” ]; then
scp -P $old_ssh_port -rC root@$old_vps_ip:/etc/letsencrypt /etc/
else
echo “[Skipping.]”
fi
# 重启lnmp
lnmp start
# 计算程序耗时并输出
echo “[End time: `date +’%Y-%m-%d %H:%M:%S’`]”
time_end=$(date +%s)
echo -e “\033[32;49;1m[Successfully done! Command takes $((time_end-time_start)) seconds.]\033[39;49;0m”
# 退出
exit 0
使用方法:
在你新的VPS上依次执行以下命令:
# chmod +x wp-migration.sh && ./wp-migration.sh
脚本执行期间需要输入3-4次旧VPS的SSH访问密码,建议提前写好。用时直接复制粘贴,免得出错。
脚本执行完成,显示如下字样,说明WordPress迁移成功。否则,本脚本可能在你的系统上无法正常使用,建议按前面的常规方法搬家。
start apache… done
Starting MySQL SUCCESS!
[Successfully done! Command takes 105 seconds.]
2
关于SSL证书的说明
LNMP1.4使用的是Certbot程序更新 Let’s Encrypt 证书的,这种方式需要安装Python依赖,容易出错。
然而,LNMP1.5使用的是acme.sh生成证书,更加简洁高效,安全可靠。因此,本说明可能并不适用于LNMP1.5版本。
如果在旧的VPS上已经安装了免费的 Let’s Encrypt 证书,但新的VPS上从未安装过(包括为其他域名),那么搬家之后,建议在新的VPS上按照如下命令添加证书,以便安装相关依赖。
但是,倘若旧的VPS上已经为网站添加了证书,且新的VPS上也成功安装过 Let’s Encrypt 证书(包括为其他域名),即系统上已经安装了相关依赖。
那么,搬家之后,证书通常不会出现问题,但自动续期时可能会显示如下错误:
Renewal configuration file /etc/letsencrypt/renewal/seoimo.com.conf is broken. Skipping.
这是因为在复制过程中,相关软链接(类似于快捷方式)会出现问题。因此,需要重建一下 cert 相关软链接:
# chmod +x cert-symlink.sh && ./cert-symlink.sh
显示提示后,输入已安装 Let’s Encrypt 证书的域名即可。
脚本执行完成后,再试着手动更新下证书,看看是否可以正常续期:
如仍提示续期失败,你可能需要手动重新安装证书:# lnmp ssl add
附上 cert-symlink.sh 脚本源码如下:
# ====================================
# Name: Cert-Symlink by SEOIMO
# Link: https://www.seoimo.com/wordpress-vps/
# Date: 2018-03-01
# ====================================
# 记录程序起始时间
echo “[Starting time: `date +’%Y-%m-%d %H:%M:%S’`]”
time_start=$(date +%s)
# 输入重建Symlink链接的网站/域名(形如:xxx.com)
read -p “Please enter your SSL domain (e.g. xxx.com): ” cert_domain
# 重建Symlink链接
rm -rf /etc/letsencrypt/live/$cert_domain/*.pem
ln -s /etc/letsencrypt/archive/$cert_domain/fullchain1.pem /etc/letsencrypt/live/$cert_domain/fullchain.pem
ln -s /etc/letsencrypt/archive/$cert_domain/cert1.pem /etc/letsencrypt/live/$cert_domain/cert.pem
ln -s /etc/letsencrypt/archive/$cert_domain/chain1.pem /etc/letsencrypt/live/$cert_domain/chain.pem
ln -s /etc/letsencrypt/archive/$cert_domain/privkey1.pem /etc/letsencrypt/live/$cert_domain/privkey.pem
# 计算程序耗时并输出
echo “[End time: `date +’%Y-%m-%d %H:%M:%S’`]”
time_end=$(date +%s)
echo -e “\033[32;49;1m[Successfully done! Command takes $((time_end-time_start)) seconds.]\033[39;49;0m”
# 退出
exit 0
备份小技巧
上文提到过,备份后的文件可以通过 FTP 软件下载到本地保存,也可以通过 SCP 命令上传到其他VPS上备份。
那么,哪个方法更好呢?
看个人喜好了。不过博主倾向于后者,即 scp 到其他VPS上备份保存。因为一旦你的网站出现问题,重新开VPS和从本地上传的话,一般只有几十到几百KB/s的上传速度,比较慢。而VPS之间的 scp 传速则快得多,通常几十MB/s的速度,简直天壤之别。
那是不是意味着需要额外单独买个VPS作为备份?
条件允许当然好。但是,也不一定需要。因为Vultr自带 “Snapshots” 快照备份功能。
博主的做法是:
在Hostwinds上另开一个机子(比如最便宜的月付$2.5),然后按本文教程搭建好本站一毛一样的站点。然后 “Snapshots”,之后把新开的VPS销毁。这样一来,即使不再新开VPS,后台依然保留备份的 “Snapshots” 。
博主需要做的就是定期花几毛钱重开VPS(每月1-2次),恢复(Restoring),然后把备份上传过来,再重新 “Snapshots” 后销毁。
这样,一旦由于某些原因本站甚至搬瓦工出了问题,博客也可以在Vultr上很快恢复访问。
Snapshots-Restoring的具体步骤:
登录Vultr → 左侧Servers → 选中VPS → 上面Snapshot → 右下Restore-Snapshot
Comments