1. 创建Dropbox应用

注册Dropbox账号,再打开https://www.dropbox.com/developers/apps

选择新建,应用类型选择Dropbox API App;数据存储类型选择Files and datastores;权限选择Yes(应用只能访问自己创建的文件);输入应用的名称,比如ifshowbackup。

创建完成后,会显示该应用的App key和App secret。

2. 下载和配置dropbox_uploader.sh脚本(root权限)

mkdir /backup
cd /root
wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
chmod +x dropbox_uploader.sh
./dropbox_uploader.sh

说明:切换到root目录,下载脚本,更改脚本为可执行,运行脚本。

运行脚本后,根据提示输入App key和App secret,选择a(应用文件夹),选择y(以上输入正确)。然后会显示验证网址并暂停,用浏览器打开这个验证网址并选择同意,再返回脚本等待界面输入回车。如果是已经创建成功的app,则是输入access token。

验证配置是否成功:(成功输出APP信息即为成功)

./dropbox_uploader.sh info

3. 编写备份脚本

vi /root/backup.sh

输入以下内容:

#!/bin/bash
DROPBOX_DIR="/backup/$(date +%Y-%m-%d)" #Dropbox上的备份目录
MYSQL_USER="root" #数据库帐号
MYSQL_PASS="123456" #数据库密码
NGINX_DATA=/etc/nginx #nginx配置目录
PHPFPM_DATA=/etc/php-fpm.d #php-fpm配置目录
WEB_DATA=/data/ifshow/web #网站数据存放目录
BAK_DATA=/backup #本地备份文件存放目录,手动创建

#定义备份文件的名字和旧备份文件(7天前)的名字
DbBak=DB_$(date +"%Y%m%d").tar.gz
WebBak=IFshow_Web_$(date +%Y%m%d).tar.gz
NGINXBak=NGINX_$(date +%Y%m%d).tar.gz
PHPFPMBak=PHPFPM_$(date +%Y%m%d).tar.gz
OldDbBak=DB_$(date -d -7day +"%Y%m%d").tar.gz
OldWebBak=IFshow_Web_$(date -d -7day +"%Y%m%d").tar.gz
OldNGINXBak=NGINX_$(date -d -7day +"%Y%m%d").tar.gz
OldPHPFPMBak=PHPFPM_$(date -d -7day +"%Y%m%d").tar.gz

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

#删除本地旧数据
rm -rf $BAK_DATA/$OldDbBak $BAK_DATA/$OldWebBak $BAK_DATA/$OldNGINXBak $BAK_DATA/$OldPHPFPMBak

cd $BAK_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} --skip-lock-tables | gzip -9 - > ${db}.sql.gz)
done
#压缩数据库文件合并为一个压缩文件
tar zcf $BAK_DATA/$DbBak $BAK_DATA/*.sql.gz
rm -rf $BAK_DATA/*.sql.gz

#压缩网站数据
cd $WEB_DATA
tar zcf $BAK_DATA/$WebBak ./*

#压缩网站配置数据
cd $NGINX_DATA
tar zcf $BAK_DATA/$NGINXBak ./*
cd $PHPFPM_DATA
tar zcf $BAK_DATA/$PHPFPMBak ./*

cd /root
#开始上传
./dropbox_uploader.sh upload $BAK_DATA/$DbBak $DROPBOX_DIR/$DbBak
./dropbox_uploader.sh upload $BAK_DATA/$WebBak $DROPBOX_DIR/$WebBak
./dropbox_uploader.sh upload $BAK_DATA/$NGINXBak $DROPBOX_DIR/$NGINXBak
./dropbox_uploader.sh upload $BAK_DATA/$PHPFPMBak $DROPBOX_DIR/$PHPFPMBak

#删除远程旧数据
./dropbox_uploader.sh delete $Old_DROPBOX_DIR

echo -e "Backup Done!"

设置脚本为可执行

chmod +x /root/backup.sh

补充:执行脚本会提示tar: Removing leading `/’ from member names,表示删除压缩包里面文件的绝对路径,无视即可。

4. 设置定时任务

执行

crontab -e

在最后加入

00 03 * * * /root/backup.sh

说明:每天凌晨3点执行备份脚本。(前面五项为分钟,小时,天,月,周)

重启cron

systemctl restart crond.service

补充:Dropbox Uploader 应用示例

要显示根目录中的所有内容,运行:

 ./dropbox_uploader.sh list

要列出某个特定文件夹中的所有内容,运行:

./dropbox_uploader.sh list Documents/manuals

要上传一个本地文件到一个远程的 Dropbox 文件夹,使用:

./dropbox_uploader.sh upload abc.pdf Documents/manuals

要从 Dropbox 下载一个远程的文件到本地,使用:

./dropbox_uploader.sh download Documents/manuals/abc.pdf ./abc.pdf

要从 Dropbox 下载一个完整的远程文件夹到一个本地的文件夹,运行:

./dropbox_uploader.sh download Documents/manuals ./manuals

要在 Dropbox 上创建一个新的远程文件夹,使用:

./dropbox_uploader.sh mkdir Documents/AAA

要完全删除 Dropbox 中某个远程的文件夹(包括它所含的所有内容),运行:

./dropbox_uploader.sh delete Documents/manuals