脚本自动备份WordPress到Dropbox

数据是无价的,所以博客的备份一定要稳妥,原先丢失过一次数据,虽然没有引起严重后果但也足以让我印象深刻了。WordPress的备份无非三种方式:

  • 插件备份
  • 脚本备份
  • 第三方服务

插件备份 WordPress 无非是最简单的方式,我一般会选择备份到 Email 或 Dropbox 。备份到 Email 时,会添加规则标注已读并移动到 Backup 文件夹,这样也是很好的备份手段。奈何本身不喜欢插件备份的形式, Email 的附件一般限制大小25MB,所以就选择了使用脚本备份到 Dropbox 的方式。这种方法仅限搭建在 VPS 上的博客,还有 OpenShift 上也可以这种方法。

使用脚本备份的方法也很简单,分为三个步骤:

  1. 设定 Dropbox 脚本
  2. 编辑自动备份脚本
  3. 添加定时运行

一、设定Dropbox脚本

首先需要一个 Dropbox 的账号,如果没有账号可以在这里注册。登录Dropbox,打开https://www.dropbox.com/developers/apps,点击Creat app创建新的app,依次点击Dropbox API、Full Dropbox,app name随便取名,创建成功后进入刚刚创建的app管理页面,能看到App key、App secret后这个地方就完成了。dropbox-app

接着使用 SSH 连接自己的 VPS 主机,进行下列操作:

mkdir backup #创建目录
cd backup #进入目录
wget https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh –no-check-certificate #下载dropbox备份脚本
chmod +x dropbox_uploader.sh #加执行权限
sh dropbox_uploader.sh info #运行脚本

首次运行需要进入之前创建的 app 的设置中生成 token ,之后输入 y 进行确认,会在当前目录下生成.dropbox_uploader文件记录 token 值。也就是说,如果你想要其他用户使用这个脚本,需要复制这个文件到其他用户目录下,或者以其他用户身份运行,重新生成一个 token 进行配置。

二、编辑自动备份脚本

需要写一个 shell 脚本,使用顺手的编辑器,在其中粘贴进去以下内容:

vim baksite.sh
#!/bin/bash
SCRIPT_DIR=”/home/usname/backup” #之前下载的脚本的位置
DROPBOX_DIR=”/backup” #保存到Dropbox中的/backup文件夹
BACKUP_SRC=”/var/www/wordpress/wp-content/uploads” #这个是你想要备份的本地VPS上的文件,不同的目录用空格分开
BACKUP_DST=”/tmp”
MYSQL_SERVER=”localhost”
MYSQL_USER=”root” #这个是你mysql的用户名名称
MYSQL_PASS=”yearliny” #这个是你mysql用户的密码
# 下面的不用改
NOW=$(date +”%Y.%m.%d”)
OLD_DROPBOX_DIR=/backup/$(date -d -30day +%Y.%m.%d)
DESTFILE=”$BACKUP_DST/$NOW.tar.gz”
# 备份mysql数据库并和其它备份文件一起压缩成一个文件
mysqldump -u$MYSQL_USER -h$MYSQL_SERVER -p$MYSQL_PASS --all-databases “$NOW-Databases.sql”
tar cfzP “$DESTFILE” $BACKUP_SRC “$NOW-Databases.sql”
# 用脚本上传到dropbox
$SCRIPT_DIR/dropbox_uploader.sh upload “$DESTFILE” “$DROPBOX_DIR/$NOW.tar.gz”
# 删除本地的临时文件
rm -f “$NOW-Databases.sql” “$DESTFILE”
$SCRIPT_DIR/dropbox_uploader.sh delete “$OLD_DROPBOX_DIR.tar.gz”
echo $NOW “All done!”
chmod +x baksite.sh
sh baksite.sh

保存,使用添加执行权限,就能执行该脚本。这个脚本能够自动保存 WordPress 的文件夹和全部数据库(不止 WordPress 的数据库)打包上传到 Dropbox 的 bakcup 文件夹下,并且自动删除30天前的旧备份文件,避免占用空间。

三、添加定时运行

由于脚本需要 root 权限才能运行,所以需要以 root 身份定时运行脚本。添加下列内容:

sudo crontab -e
0 0 * * * /home/user/backup/backup.sh >>/var/log/sitebak.log

后面的路径修改为之前自己编辑的自动备份脚本的绝对目录位置,保存退出,即可每天零点备份一次博客,并输出每次运行的信息到/var/log/sitebak.log,可谓十分放心~如果你想要自己设定crontab的任务时间,可以查看crontab的用法

注意:test.sh > logtest.sh >>log两种方法所保存的日志是存在差异的,第一种方法只会保存最后一次的运行结果,即最后一次的运行信息和覆盖掉原先的日志。而第二种方法却会记录每次的执行信息到文件这。

四、如何恢复备份文件

前面我们已经备份了整个数据库、必要的网站文件以及 Web server 配置,那么等到需要的时候,又该如何恢复呢?

首先需要从 Dropbox 上下载我们之前备份的文件。

./dropbox_uploader.sh download /backup/2017.9.25.tar.gz a.tar.gz

使用脚本的download参数就能把存放到Dropbox中/backup/2017.9.25.tar.gz这个文件下载至当前文件夹并命名为a.tar.gz。

tar -xzvf a.tar.gz

执行上列命令解压压缩包,解压完成后可以使用ll命令查看文件列表,我们的数据安然的在那里,就可以利用他们恢复到之前的样子了。值得一提的是,如果不是迁移到新主机,大多数时候只需要恢复数据库或一部分网站文件,而不需要全部恢复。

数据库

导入数据库非常简单,在 shell 窗口切换至存放备份数据的文件夹,然后只需要执行一行命令。

mysql -uusername -ppassword < databases.sql

其中高亮部分的usernamepassword都替换成自己的 MySQL 账户的用户名和密码,databases则为自己的数据库名称。

网站文件

如果你原先的网站文件在/var/www/html,那么一行命令就可恢复。

sudo mv -rf var/www/html /var/www/html

Web server 的恢复方法和恢复网站文件一致。

“脚本自动备份WordPress到Dropbox”的4个回复

  1. API方式适合文件数不多的项目,多的话会比较慢,而且失败率高。
    而且API方式对于一些文件类型,并不能完善判断是否更改,很多直接重新上传了。

    我现在用安装dropbox程序的方式来同步。比较节省流量和时间

    1. 备份的文件是压缩打包好的数据库和网站文件,所以上传的文件数始终是1,至于容易失败,我却没有体会。目前博客内容不多,只使用了过滤垃圾评论插件,所以整个WordPress和数据库也就17M,每天备份一份,留有30份存档,这种备份方式目前来说还是很妥当的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注