VPS数据自动备份到Dropbox

2012-05-31 update

  • 修正删除dropbox文件夹错误
  • 将删除服务器上备份文件间隔调整成6天
  • 删除dropbox文件夹间隔调成成30天

既然前几天完成了在VPS上搭建web服务器,接着应该是研究如果自动备份VPS里的东西,以防止数据丢失

VPS月付+每日自动备份,防止跑路、线路、硬件故障等不可控状况。

因为不想为了一个VPS购买另一个来用作FTP,所以打算使用现有的网盘作为备份终端。DropBox无疑是最好的选择——不怕墙,因为已经墙了;使用Amazon 的云服务保证了可用性;花点时间就可以刷到至少18G容量;不用提心吊胆,担心数据无缘无故消失,或者数据突然出现在Gov手上。

一 设置Dropbox

由于Dropbox强大的API,在不使用客户端的同时,可以使用第三方脚本直接上传文件。对比官方客户端运行起来上百M的内存占用,这个小小的脚本完全可以满足我们的需求。

Dropbox-Uploader https://github.com/andreafabrizi/Dropbox-Uploader

将次shell script下载到使用目录,运行,此时根据提示设置自己的Dropbox应用API(就像申请Twitter API一样简单),然后按照步骤设置,然后就可以使用其命令上传/下载文件了

1
2
3
4
#示范
./dropbox_uploader.sh upload /etc/passwd /myfiles/passwd.old
./dropbox_uploader.sh upload /etc/passwd
./dropbox_uploader.sh download /backup.zip

二 使用脚本自动打包并上传

本脚本摘自Hostloc全球主机论坛,在基于VPS的配置进行相应修改——对应之前web服务器的相关配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/bash
#请自行修改以下目录
DROPBOX_DIR=/BackUp/$(date +%Y-%m-%d) #Dropbox上的目录
MYSQL_USER="root" #Mysql帐号
MYSQL_PASS="password" #Mysql密码
DOMAIN_DIR=/usr/local/webserver/nginx/conf/vhost #存储域名信息的目录
BACK_DATA=/home/www #用于存放备份文件的目录
DATA=/home/wwwroot #网站文件存放目录
#定义数据库的名字和旧数据库的名字
DataBakName=Database_$(date +"%Y-%m-%d").tar.gz
WebBakName=Data_$(date +%Y-%m-%d).tar.gz
DomainName=Domain_$(date +%Y-%m-%d).tar.gz
OldData=Database_$(date -d -6day +"%Y-%m-%d").tar.gz
OldWeb=Data_$(date -d -6day +"%Y-%m-%d").tar.gz
OldDomain=Domain_$(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/$OldDomain
cd $BACK_DATA
#使用命令导出SQL数据库,并且按数据库分个压缩
for db in `/usr/local/webserver/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
(/usr/local/webserver/mysql/bin/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 $DOMAIN_DIR
tar zcf $BACK_DATA/$DomainNameDomainName./*./*
cd $BACK_DATA
#开始上传
sh dropbox_uploader.sh upload $BACK_DATA/$DataBakName $DROPBOX_DIR/$DataBakName
sh dropbox_uploader.sh upload $BACK_DATA/$WebBakName $DROPBOX_DIR/$WebBakName
sh dropbox_uploader.sh upload $BACK_DATA/$DomainName $DROPBOX_DIR/$DomainName
#开始删除远程30天前的文件
sh dropbox_uploader.sh delete $Old_DROPBOX_DIR/
echo -e "Thank you! all done"

然后使用crontab,让此脚本每天/每几天运行,网站的所有数据就会安全地备份到Dropbox了。