WordPress的备份无非三种方式:
- 插件备份
- 脚本备份
- 第三方服务
插件备份 WordPress 无非是最简单的方式,推荐新手使用。插件可以备份博客到 Email 、FTP 或是 Dropbox 。备份到 Email 时,有个小技巧就是邮件标题或内容一般都会有插件名,然后就可以在接受邮箱中添加规则,将标题含有特殊字段的邮件标注已读并移动到 Backup 文件夹,这样也是很好的备份手段。奈何我本身不喜欢插件备份的形式, Email 的附件一般限制大小 25MB,所以就选择了使用脚本备份到 Dropbox 这种更加灵活的方式。这种方法仅限使用在有 SSH 管理权限的主机或空间中,比如 VPS、OpenShift。
使用脚本备份的方法也很简单,分为三个步骤:
- 下载设定 Dropbox 脚本
- 编辑自动备份脚本
- 添加定时运行
一、设定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 > log
和test.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
其中高亮部分的
username
和password
都替换成自己的 MySQL 账户的用户名和密码,databases
则为自己的数据库名称。网站文件
如果你原先的网站文件在
/var/www/html
,那么一行命令就可恢复。sudo mv -rf var/www/html /var/www/html
Web server 的恢复方法和恢复网站文件一致,直接把文件移动过去即可.
No comments:
Post a Comment