对于博主而言,除了研究原创文章和拓展流量之外,最重要的就是WordPress备份了。
回想起很久很久以前,在使用虚拟主机建站时,博主根本就没做过备份。
原因主要有两点:
一是因为当时用WordPress建站只是一种简单的爱好,对博客的重要性认识不足;二是知识欠缺,脑子里压根就没有备份这根弦。
直到有一天,悲剧来了。。
不知道此刻正在看文章的你是否也和博主一样,忍受不了管理后台的WordPress更新提示。每次看到有更新的插件,总忍不住去升级。
一般来说,为了系统安全,插件和主题升级到最新版本是推荐的,有时候也是必需的。
但这往往会忽略一个重要问题,就是兼容性。
这包括两个方面:插件和主机系统的兼容性,以及插件和插件之间的兼容性。
比如,某个插件旧的版本是用PHP5.X写的,新版本则是用PHP7.X写的,而你的主机系统使用的是PHP5.X,升级后则可能就会出现不兼容。
或者,一个插件升级后和另一个或几个插件运行时有冲突,同样会导致不兼容。
不兼容的后果就是:网站打不开!(500 Internal Server Error)
是不是有点眼熟?
于是,那天我登入WordPress后台,在升级了几个插件之后,网站突然就显示500错误了。
当时博主的建站知识非常有限,只能去找虚拟主机商家解决。
一封接着一封的工单,耗费了差不多一整天的时间,最后主机商答应可以限时下载他们自己备份的网站数据。
但是,这个数据是十几天前的。因为他们只提供每半月一次的WordPress整站备份。
好在博客更新并不频繁,而且后续网站恢复也很顺利,所以丢失的数据并不算多。但是,这仍然让博主感觉非常不愉快,并且直到现在,想起来多少还有些后怕。
(现在看来,其实当时并不需要那么麻烦,只要把插件目录一个一个的改名再启用,然后找出异常插件并将其停用就可以了。)
从这件事上,博主学到了两点教训:
①WordPress整站数据一定要经常备份;
②插件一定不要着急升级,最好等一段时间(比如半个月)后再升级,并且升级前做好整站备份和SnapShot快照备份(如果你的VPS支持的话)。
所以,自那之后,博主所有的网站都会每周备份至少两次。
起初是通过手动备份,压缩整站数据并导出数据库,保存在服务器上,同时下载到电脑里。
后来,随着博主对Linux命令的日益熟练,发现在WordPress备份过程中,很多手动操作完全可以通过简单的编程来实现全程自动化,从而极大提高备份效率。
博主目前使用WordPress备份脚本(详见下文),每天定时自动备份一次,并上传到远程 VPS/FTP 空间。同时,本机VPS和远程VPS均保留最近N次的备份数据。
此外,使用Hostwinds提供的SnapShot快照备份功能,还可以随时备份整个VPS系统,更进一步确保网站数据的安全。
本机VPS + 远程VPS + SnapShot快照,构建起三重备份存储,再也不用担心数据丢失了。
当然,这完全得益于使用VPS且纯命令管理的这种建站方式。而那种采用可视化面板(比如 cPanel 或者 DirectAdmin )的建站方式,几乎是没有机会学习和实践这些Linux知识的。
下面,本文将分享博主自用的两种WordPress备份方法:以前使用过的手动备份命令,以及目前正在使用的自动备份脚本。
同时,也会涉及WordPress的还原和恢复,以及WordPress搬家和迁移等操作介绍。
#1、手动备份命令
在Linux系统下,对WordPress进行手动备份其实也并不难。主要涉及两部分:网站源文件备份和对应的数据库备份。
① 网站源文件备份
为了方便管理,我们先建立一个文件夹专门存放备份数据,比如 /home/backup/ :
以本站 seoimo.com 为例,压缩网站根目录并移动到 /home/backup/ 文件夹下(为方便管理,博主添加了备份日期,建议你也这样做):
# tar -zcvf seoimo-2019-07-08.tar.gz seoimo.com
# mv seoimo-2019-07-08.tar.gz /home/backup/
好了,整站已经备份完成。接下来,开始备份网站数据库。
② 网站数据库备份
首先,打开 /home/backup/ 文件夹,我们需要将数据库备份在这里:
# lnmp database list
输入 root 数据库密码(参考 #6 + 搭建LAMP环境),即可查看当前数据库列表。
选择需要备份网站的对应数据库,以本站的 sjk_seoimo 为例:
再次输入 root 数据库密码,即可完成数据库备份。
通过命令 # ls -la 查看当前目录,应该能看到已经备份好了的压缩包。
此时,可通过 FTP 工具下载到本地电脑保存,也可以上传到其他 VPS/FTP 上保存。
#2、自动备份脚本
如果只是偶尔备份几次,用上面的方法进行手动备份倒没太大的不便。
但如果你需要经常备份,比如每天备份一次,那么手动备份的效率就太低了。
设想一下,你需要每天至少登录一次VPS,接着运行一系列命令,然后再上传到其他 VPS 或者 FTP 空间。
甚至,如果你想下载到本地电脑,几百MB甚至几个GB的压缩包,也是够传一段时间的。
实际上,在手动备份几次之后,博主就已经厌倦了这种单调且低效的备份方式。
所以,自己写了一个相对简单适用的WordPress自动备份脚本。
其主要功能有以下几点:
①自动备份当前VPS上所有WordPress根目录(网站数据)以及对应的数据库;
②同时备份整个数据库目录,以及网站相关目录比如SSL证书等;
③支持自动FTP上传到其他VPS或者FTP空间;
④支持自定义备份频率和保留最近N次备份;
⑤支持自动恢复(从本机VPS或者远程FTP),以及搬家/迁移。
有几点需要设置的变量(关于远程FTP、备份名称和备份保留次数等等),说明如下;若是没有远程FTP,相关设置可以不填,备份只保存在本机VPS上面。
FTP_USER="ftpusername" (远程FTP用户名)
FTP_PASSWD="ftpuserpasswd" (远程FTP密码)
BACKUP_NAME="seoimo-wp-backup" (备份名称,建议只更改 seoimo 即可)
BACKUP_NUMBER=5 (备份保留次数)
MYSQL_ROOT_PASSWD="mysqlrootpasswd" (ROOT数据库密码)
FTP_BACKUP="/home/backup" (远程FTP备份目录,默认即可)
DIR_BACKUP="/home/backup" (本机VPS备份目录,默认即可)
#3、脚本使用方法
除了上面提到的相关变量需要设置以外,此脚本在使用前还需要做如下几点配置。主要是在本机VPS和远程 VPS/FTP 空间上的配置。
①本机 VPS 上的配置
第一、需要安装下 ftp 命令,否则可能会提示 -bash: ftp: command not found 错误:
然后,新建备份目录 /home/backup/ :
如果已经提前创建好了此备份目录,则可直接跳过该步。
②远程 VPS/FTP 上的配置
这里演示的是远程VPS上创建 FTP 用户的操作,如果你已有 FTP 账户,可直接跳过该步。
首先,仍然是新建备份目录 /home/backup/ :
其次,在lnmp1.6环境下安装 FTP 服务端:
# cd /root/lnmp1.6-full
# bash pureftpd.sh
然后,添加 FTP 用户:
自行设置FTP用户名、密码以及备份目录的绝对路径 /home/backup/ 如下:
| Manager for LNMP, Written by Licess |
+-------------------------------------------+
| https://lnmp.org |
+-------------------------------------------+
Enter ftp account name: ftpusername
Enter password for ftp account ftpusername: ftpuserpasswd
Enter directory for ftp account ftpusername: /home/backup
Password:
Enter it again:
Created FTP User: ftpusername Sucessfully.
最后,为了防止在使用 FTP 工具上传时,可能会提示 “553 Can’t open that file: Permission denied” 的错误,建议更改下权限:
至此,关于FTP备份的准备工作已全部完成。
#4、写在最后
此WordPress自动备份脚本是在 CentOS7 + LNMP1.6/Apache 环境下进行编写和测试的,所以,博主也只推荐在此环境下使用。
假如,你是完全按照本站中的VPS建站教程搭建的WordPress博客,那么运行此脚本时应该不会有大的问题。
但是,鉴于博主水平有限,此备份脚本难免不会出现BUG。如果你在使用过程中发现了问题,或者有好的建议,烦请在下面留言讨论。
博主您好,我按照教程的的方式重装了个lnmp1.6,然后恢复数据之后网站无法打开,发现apache无法启动,报错如下,请问这个该如何处理 感谢~
restart apache... AH00526: Syntax error on line 29 of /usr/local/apache/conf/vhost/www.lalala.xyz.conf:
SSLCertificateFile: file '/etc/letsencrypt/live/www.lalala.xyz/fullchain.pem' does not exist or is empty
failed
看下此文件是否存在:
若不存在,检查下SSL证书是否有错,或者重新生成下SSL证书:
我看了一下,这个文件存在的,然后我尝试了重新生成证书,可能是之前尝试重新生成证书次数太多,提示已经颁发太多证书·····················这该怎么办········
另外,我尝试重启apache,报错如下
restart apache... AH00526: Syntax error on line 84 of /usr/local/apache/conf/vhost/lalala.xyz.conf:
SSLCertificateFile: file '/usr/local/apache/conf/ssl/lalala.xyz/lalala.xyz.cer' does not exist or is empty failed
在此之前,网站运行了挺久的,之前也没见过类似的证书报错呀
确定绑定的域名带不带 www ?我看到你两次回复的域名不一样。
如果SSL证书还在,先备份起来,再研究如何导入。
如果操作之前进行了系统snapshot备份,恢复一下就好了。
至于生成次数过多的问题,LE证书好像是每个域名每周最多申请五次,超过了就要等几天再申请了。
ls大法好,我通过恢复之前的snapshot,把相关证书文件备份下来,然后恢复到新的snapshot,放回相应位置,就解决了,感谢
不客气,所以说备份是多么的重要。
博主,你好
我想问下在更换域名,IP,从新安装Word Press后如何使用以前备份的数据,直接替换好像不行。谢谢!
WordPress搬家吗?私以为不管换不换域名,其实都不难,要点有这几个:
①进入旧主机 phpmyadmin,导出数据库;
②打包旧域名 old.com 文件夹(注意 .htaccess 别漏了);
③新主机上绑定好域名以及https,建立好数据库;
④进入新主机 phpmyadmin,导入第一步里备份的数据库,然后按本站介绍的替换方式进行替换域名;
⑤新主机新域名 new.com 文件夹里解压第二步骤备份的 old.com,把其内的所有文件移动到 new.com 文件夹里(注意 .htaccess 别漏了);或者,直接把解压后的 old.com 文件夹重命名为 new.com;
⑥如果数据库名字和密码有改动,注意修改 wp-config.php 内的对应信息;
⑦如果旧网站上开启了缓存,注意在 wp-config.php 和 wp-content 目录下的 wp-cache-config.php和object-cache.php 里的绝对路径修改一下;
⑧最后,再把根目录下 .htaccess 域名更改下;
WordPress搬家,不管是从VPS到VPS,还是VPS到虚拟主机,抑或是虚拟主机到虚拟主机,注意到以上这几步骤,熟练的话,基本半个小时就可以搞定了,尤其是开启了ssh传输的情况下。
文中介绍的脚本备份方式,有一定的局限性,前提是两个VPS的建站环境必须一样,包括各种软件的版本也建议一致。否则,就有可能出错。
这个备份脚本是博主自用的,其实更适合在当前VPS上备份和恢复。
而上面介绍的这几步,更具有普适性。
博主,按照你的方法,我已成功迁移word press,谢谢!
不客气的。
现在提示我要更新PHP了,博主你更了吗?怎么更的?
PHP5.X太老了,建议尽快升级到php7.X。
单独升级php的话,可以参考这里:
https://www.seoimo.com/lamp-ssl/#lnmp1.3-to-lnmp1.4
我是直接全新安装了一个lnmp1.6,文中有介绍:
https://www.seoimo.com/wordpress-vps/#setup-lamp
您的意思是备份全站然后直接装新的吗?
是的,备份 /home/wwwroot/xxx.com 网站文件夹,再导出网站数据库。等访客少的时候,抽出来俩小时就能搞定了。
博主对WordPress的UpdraftPlus插件怎么看?那个可以一键Google Drive备份,看上去很安全。
不错的插件,以前也用过。安全但不够方便,一旦WP打不开,再好的插件也白搭。