Pages

Wednesday, 25 October 2017

自动备份WordPress数据到Dropbox

WordPress的备份无非三种方式:
  • 插件备份
  • 脚本备份
  • 第三方服务
插件备份 WordPress 无非是最简单的方式,推荐新手使用。插件可以备份博客到 Email 、FTP 或是 Dropbox 。备份到 Email 时,有个小技巧就是邮件标题或内容一般都会有插件名,然后就可以在接受邮箱中添加规则,将标题含有特殊字段的邮件标注已读并移动到 Backup 文件夹,这样也是很好的备份手段。奈何我本身不喜欢插件备份的形式, Email 的附件一般限制大小 25MB,所以就选择了使用脚本备份到 Dropbox 这种更加灵活的方式。这种方法仅限使用在有 SSH 管理权限的主机或空间中,比如 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后这个地方就完成了。
接着使用 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,可谓十分放心。
注意: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 的恢复方法和恢复网站文件一致,直接把文件移动过去即可.

No comments:

Post a Comment