首先,需要创建一个 Dropbox 应用,可以从该网址进行创建:https://www.dropbox.com/developers/apps/create。
在这里,应用类型选择 Dropbox API App,数据存储类型选择 Files and datastores,权限选择 Yes(应用只需要访问它创建的文件)。然后命名创建。
下载 dropbox 备份脚本:
wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
然后,为该脚本添加执行权限:
chmod +x dropbox_uploader.sh
执行该脚本:
./dropbox_uploader.sh
根据提示输入 Dropbox 应用中的 App key 和 App secret,许可类型选择 a,确认 y,复制给出的权限验证链接到浏览器,确认后回到终端按任意键完成。
编写定时备份脚本,取名为 backup.sh。其代码如下:
#!/bin/bash
MYSQL_USER=root #mysql用户名
MYSQL_PASS=********* #mysql密码
WEB_DATA=/home/wwwroot #要备份的网站数据
# 定义备份存放目录
DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox上的备份目录
LOCAL_BAK_DIR=/home/www # 本地备份文件存放目录
#定义备份文件名字
DBBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +"%Y%m%d").tar.gz
# 定义旧数据名称
Old_DROPBOX_DIR=/$(date -d -30day +%Y-%m-%d)
OldDBBakName=Data_$(date -d -30day +"%Y%m%d").tar.gz
OldWebBakName=Web_$(date -d -30day +"%Y%m%d").tar.gz
#删除本地30天前的旧数据
rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName
./dropbox_uploader.sh delete $Old_DROPBOX_DIR/
#导出mysql数据库
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases > $LOCAL_BAK_DIR/db.sql
#压缩数据库
tar zcvf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/db.sql
rm -rf $LOCAL_BAK_DIR/db.sql
#压缩网站数据
tar zcvf $LOCAL_BAK_DIR/$WebBakName $WEB_DATA
#开始上传
cd ~
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName
echo -e "Backup Done!"
其中,用户可以根据自己的需求改编需要备份的目录,以及保留旧数据的时长(比如我这里设置的是 Dropbox 保留 7 天,本地保留 10 天)。
接下来,为这个备份脚本增加执行权限:
chmod +x backup.sh
此处可以先测试一下能否备份成功:
crontab -e,添加:
30 3 * * * /root/bin/backup.sh
这样,就可以每天凌晨 3:30 自动备份到 Dropbox 了。