DropBox 备份服务器文件

通过自建的 Git 服务器来管理代码后,定时备份数据文件就显得格外重要了。一旦服务器出现故障,上传的代码就没了。 DropBox 是国外非常受信赖的云同步服务,虽然 DropBox 提供的免费空间较小,但用来备份个人代码文件还是足够的。而且 DropBox 提供了完善的 API 接口,可以通过命令行直接上传下载文件,当服务器位于海外时同步速度也十分令人满意。下面介绍如何将服务器中的数据备份至 DropBox 中。

创建 DropBox 应用

首先需要创建一个 DropBox 应用来利用 DropBox 的 API,直接点击该网址创建: https://www.dropbox.com/developers/apps/create 。

创建应用时的一些选项如下:

  • Choose an API(应用类型):DropBox API
  • Choose the type of access you need(数据访问类型):App folder
  • Name your app(应用名称,取一个喜欢的即可):GogsBackup

应用创建后就可以获得 App keyApp sercet ,保存这两行字符。

获取并设置 DropBox 上传下载脚本

Dropbox-Uploader 是一个第三方的 DropBox 上传下载脚本。首先获取该脚本并为其设置可执行权限:

wget https://raw.githubusercontent.com/tennfy/Dropbox-Uploader/master/dropbox_uploader.sh
chmod +x dropbox_uploader.sh

直接运行该脚本,第一次运行时会连接 DropBox 验证权限。

 ~/shell/dropbox_uploader.sh

按照提示输入上文中保存的 App keyApp sercet ,Permission type 选择a 。然后在浏览器中打开给出的连接地址,给予权限。以后运行时就不用再次验证了。

注意 :这个授权的过程只是针对当前登陆 ssh 的用户,并非全局,如果切换用户运行脚本,会提示再次进行授权,因此应提前切换到需要运行该脚本的用户进行授权。其实当前用户的授权信息保存在 ~/.dropbox_uploader 文件中,因此切换用户后会提示首次运行需要进行授权。

备份脚本

#!/bin/bash

# 指定dropbox_uploader.sh脚本的保存目录
SCRIPT_DIR="/root/backup"

# 上传到DropBox的文件夹
DROPBOX_DIR="/backup/$(date +"%Y.%m.%d")"

# 需要保存的服务器文件夹,可以用空格隔开多个文件夹
BACKUP_SRC="/data/wwwroot"

# 服务器上临时的备份保存文件夹
LOCAL_BAK_DIR="/root/backup"

# MySQL相应配置
MYSQL_SERVER="localhost"
MYSQL_USER="root"
MYSQL_PASS="password"

# 数据备份压缩后的文件名称
DBBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +"%Y%m%d").tar.gz

# 已过期备份数据的名称(3天前的数据会被删除)
Old_DROPBOX_DIR="/backup/$(date -d -3day +"%Y.%m.%d")"
OldDBBakName=Data_$(date -d -3day +"%Y%m%d").tar.gz
OldWebBakName=Web_$(date -d -3day +"%Y%m%d").tar.gz

# 导出MySQL数据库备份(所有数据库),并压缩为指定文件名
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --events --all-databases > $LOCAL_BAK_DIR/Database.sql
tar zcvf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/Database.sql
rm -rf $LOCAL_BAK_DIR/Database.sql

# 压缩需要保存的文件夹为指定文件名
tar zcvf $LOCAL_BAK_DIR/$WebBakName $BACKUP_SRC

# 上传压缩后的备份文件到指定的DropBox目录
$SCRIPT_DIR/dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName
$SCRIPT_DIR/dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName
echo -e "upload done!"

# 上传完成后删除服务器上及DropBox中已经过期的备份数据,节省空间
rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName
$SCRIPT_DIR/dropbox_uploader.sh delete $Old_DROPBOX_DIR/
echo -e "delete old backup done"

数据库备份无效请设置 mysqldump 为绝对路径

设置备份脚本定时运行

通过 cron 程序可以设定程序定时运行。需要注意的是 cron 运行是分用户的,某个用户设定的定时任务运行时会以该用户的权限运行。因此要注意上文中提到的 dropbox_uploader 运行用户的问题。

su root # 切换到合适用户执行定时任务
crontab -e

编辑定时任务

crontab -e
0 3 * * * /bin/bash /root/shell/backup.sh

以上命令表示每天早上 3:00 执行命令 /bin/bash /root/shell/backup.sh

如果没有设置服务器时区或者不知道服务器时间,可以通过命令 date 来查看服务器的当前时间。

设置完成后,重启 cron 服务:

service cron restart 

然后,定时任务就会自动执行了。

除非注明, 风波竹林 文章均为原创,转载请以链接形式标明本文地址
本文地址: https://blog.fbzl.org/dropbox-备份服务器文件/

发表评论