[转]自动备份网站并同步到 Dropbox

转自:http://www.lovelucy.info/backup-website-and-sync-to-dropbox.html

之前写过一篇博客,记录了 定时自动备份网站和数据库 的脚本,不过只是将 VPS 上的数据打包保存在了本机的一个目录下,要知道真正的容灾备份需要至少在 3 个不同的物理节点上都有一份拷贝的。Email 发送备份文件在数据超多的情况下不太实际,而出于成本考虑我不想为了一个 VPS 又购买另一个来用作 FTP。不禁想到 DropBox,它无疑是很好的选择——基于 Amazon S3 的云存储保证了可靠性,免费的容量已经足够用,也不必担心数据被审查。

一、设置 Dropbox

Dropbox 提供了丰富的 API,使得我们不必使用官方庞大的客户端,而用一些简单轻量的脚本即可直接上传文件。

Dropbox-Uploader 就是这样一个第三方的脚本,并且它已经开源在了 Github。我们将此脚本下载到 VPS 中,即可使用。

$ wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
$ chmod +x dropbox_uploader.sh
$ ./dropbox_uploader.sh

运行脚本,根据提示设置自己的 Dropbox 应用 API,然后按照步骤设置,就可以使用其命令上传和下载文件了。

dropbox_app_create

二、同步备份脚本

脚本根据自己的 VPS 配置进行一些修改。

#!/bin/bash
# 一些配置
DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox 目录,根目录 / 是你已经创建的 app 目录
MYSQL_USER="root"
MYSQL_PASS="password"
MYSQL_DB=('wordpress' 'project2')
BACK_DATA=/root/backup-data # 备份文件保存在本地的目录
DATA=/var/www # 需要备份的网站文件

# 定义备份文件名
DataBakName=Database_$(date +"%Y-%m-%d").tar.gz
WebBakName=Web_$(date +%Y-%m-%d).tar.gz
OldData=Database_$(date -d -6day +"%Y-%m-%d").tar.gz
OldWeb=Web_$(date -d -6day +"%Y-%m-%d").tar.gz
# Dropbox 里 30 天以上的旧数据可以清除
Old_DROPBOX_DIR=/$(date -d -30day +%Y-%m-%d) 
# 清理本地保存了 6 天的备份
echo -ne "Delete local data of 6 days old..."
rm -rf $BACK_DATA/$OldData $BACK_DATA/$OldWeb
echo -e "Done"

cd $BACK_DATA
# 导出 MySQL 数据库,并压缩
echo -ne "Dump mysql..."
for db in ${MYSQL_DB[@]}; do
    (/usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db}.sql)
done
tar zcf $BACK_DATA/$DataBakName *.sql
rm -rf $BACK_DATA/*.sql
echo -e "Done"

# 备份网站文件
echo -ne "Backup web files..."
cd $DATA
tar zcf $BACK_DATA/$WebBakName *
echo -e "Done"

cd $BACK_DATA
# 开始上传到 Dropbox
echo -e "Start uploading..."
./dropbox_uploader.sh upload  $BACK_DATA/$DataBakName $DROPBOX_DIR/$DataBakName
./dropbox_uploader.sh upload  $BACK_DATA/$WebBakName $DROPBOX_DIR/$WebBakName

# 清理 Dropbox 里 30 天前的旧数据
./dropbox_uploader.sh delete $Old_DROPBOX_DIR/

echo -e "Thank you! All done."

然后使用 crontab,让此脚本每几天定时自动运行,网站的所有数据就会安全地备份到 Dropbox 了。其他注意事项,可以参考我之前的一篇 定时自动备份网站和数据库

Linux VPS备份网站数据到Dropbox

之前本来想用FTP来进行备份数据的,但是都没有什么长期的FTP服务器,于是就想了用网盘来备份网站的数据。

国外的网盘推荐就是使用Dropbox,信誉不错的,做了基本任务就2G多的空间,可以自己刷好友来扩大容量!

于是乎,在网上搜了搜,转载过来和大家分享!

 

准备工作

如果没有Dropbox的用户可以使用后面的推荐码进行注册,http://db.tt/yV9WSxh ,不遮遮掩掩,就是推广链接!你好我好嘛~

注册完后,前往Apps点击Create an app,需要验证邮箱(不必多说了吧),填好基本信息,在Access的选项中选择Full Dropbox

Snip20130129_1

如上图所示!

第二步就是下载Dropbox-Uploader,下载地址:https://github.com/andreafabrizi/Dropbox-Uploader

下载之后,上传至/root/目录下,不建议改名字!

 

开始配置

chmod +x dropbox_uploader.sh #赋予权限
./dropbox_uploader.sh info #开始绑定APP

这里他会让你输入App key以及App secret,在刚刚我们创造的APP那里有!

然后他会询问你是App folder 还是Full Dropbox,按照刚刚我们上面的说明,按f,然后回车!

然后他会给出一个地址,自己复制下来用IE打开,其实就是授权给这个APP!

授权好了,回到SSH上,按下回车。

如果不出意外的话,我们就配置好了,可以用下面的代码测试!

./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old

回显DONE就说明配置成功了!

 

关键代码

#!/bin/bash
DROPBOX_DIR="/backup/$(date +%Y-%m-%d)" #Dropbox上的备份目录
MYSQL_USER="root" #数据库帐号
MYSQL_PASS="123456" #数据库密码
YM_DATA=/etc/nginx #nginx配置目录
BACK_DATA=/home/backup #本地备份文件存放目录,手动创建
DATA=/home/www #网站数据存放目录

#定义数据库的名字和旧数据库的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
YMName=YM_$(date +%Y%m%d).tar.gz
OldData=Data_$(date -d -6day +"%Y%m%d").tar.gz
OldWeb=Web_$(date -d -6day +"%Y%m%d").tar.gz
OldYM=YM_$(date -d -6day +"%Y%m%d").tar.gz

#定义Dropbox旧数据的名字(30天前)
Old_DROPBOX_DIR=/backup/$(date -d -30day +%Y-%m-%d) #Dropbox上的备份目录

#删除本地6天前的数据
rm -rf $BACK_DATA/$OldData $BACK_DATA/$OldWeb $BACK_DATA/$OldYM

cd $BACK_DATA

#使用命令导出SQL数据库,并且按数据库分个压缩
for db in `mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    (mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz)
done
#压缩数据库文件合并为一个压缩文件
tar zcf $BACK_DATA/$DataBakName $BACK_DATA/*.sql.gz
rm -rf $BACK_DATA/*.sql.gz

#压缩网站数据
cd $DATA
tar zcf $BACK_DATA/$WebBakName ./*

#压缩域名配置数据
cd $YM_DATA
tar zcf $BACK_DATA/$YMName ./*

cd ~
#开始上传
./dropbox_uploader.sh upload $BACK_DATA/$DataBakName $DROPBOX_DIR/$DataBakName
./dropbox_uploader.sh upload $BACK_DATA/$WebBakName $DROPBOX_DIR/$WebBakName
./dropbox_uploader.sh upload $BACK_DATA/$YMName $DROPBOX_DIR/$YMName

#开始删除远程30天前的文件
./dropbox_uploader.sh delete $Old_DROPBOX_DIR/

echo -e "Thank you! all down"

按照说明自己配置一下,如果需要定时备份的请麻烦自己设置!

还需要赋予脚本运行的权限

chmod +x backup.sh #赋予权限

注意:/home/backup/这个目录需要自己创建,不然会报错!

运行的时候就输入下面的代码即可!

./backup.sh

最后

没有最后了,当你做完

你也可以按照自己的需要设置,不需要的功能自己#了他就可以了!

祝你一路顺利!我的vps就是一路顺利过来了~