备份网站数据到 Dropbox 并设置自动运行

Kevin 教程 240 次浏览 抢沙发

介绍一个零成本定时备份网站数据到 Dropbox 的方法,自己测试用了下,还是挺好用的。之前是打包 scp 到不同 VPS 上备份,现在可以省掉了,似乎这样数据可靠性也更好,推荐使用!

Dropbox 免费用户默认有 2GB 储存空间,可以通过邀请朋友增加至最多 16 GB。如果上传文件名是相同的,还可以查看 30 天内的不同版本,类似于文件快照,这个不重复占用空间。

在 Linux 上使用 Dropbox 虽然官方也有客户端,但测试下来 VPS 使用比较复杂。首先需要先运行 Dropbox 守护程序,配合浏览器访问登录授权链接,然后再用 Python 脚本控制。使用体验没有 Dropbox Uploader 这个开源 BASH 脚本好用,下面介绍的是后者使用方法。

创建 Dropbox 应用以获得 API Token

登录 Dropbox 账户,访问 Developers 页面,点击右上角 App console,创建一个应用。

Dropbox APP Console

创建选项如下。其中 API 可访问范围建议仅限于应用文件夹,这样符合权限最少够用原则。

Dropbox Create a new app

在应用设置界面找到 Generated access token,点击生成 Access Token 字符串复制备用。

Generated access token

运行 Dropbox Uploader 配置向导

下载 Dropbox Uploader 脚本,赋予可执行权限,然后运行脚本。

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
chmod +x ./dropbox_uploader.sh
./dropbox_uploader.sh

在脚本交互提示中输入之前生成的 Access Token。之后便可以开始使用了。

This is the first time you run this script, please follow the instructions:

1) Open the following URL in your Browser, and log in using your account: https://www.dropbox.com/developers/apps
2) Click on "Create App", then select "Dropbox API app"
3) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder
4) Enter the "App Name" that you prefer (e.g. MyUploader22016222946048)

Now, click on the "Create App" button.

When your new App is successfully created, please click on the Generate button
under the 'Generated access token' section, then copy and paste the new access token here:

# Access token: 此处粘贴你的 Access Token

> The access token is xxxxxxxxxxxxxx. Looks ok? [y/N]: 按 y 确认输入
The configuration has been saved.

配置文件位于~/.dropbox_uploader,日后若要更改 Access Token,直接修改该文件即可。

掌握 Dropbox Uploader 命令语法

下面<...>部分为必要参数,[...]为可选。懒得看的可直接查看最后使用例子。

命令语法

./dropbox_uploader.sh [可选参数] <操作选项>

可选参数

  • -f <文件名> :加载指定配置文件
  • -s :上传 / 下载时跳过已存在文件(默认覆盖)
  • -d :启用调试模式
  • -q :安静模式,不显示进度信息
  • -h :以易读格式显示文件大小
  • -p :显示 cURL 进度信息
  • -k :不检查 SSL 证书(不安全)
  • -x <文件或目录名> :排除指定文件或目录的同步

操作选项

  • upload <本地文件或目录> <远程文件或目录> :上传,支持使用通配符
  • download <远程文件或目录> [本地文件或目录] :下载
  • delete <远程文件或目录> :删除
  • move <远程文件或目录> <远程文件或目录> :移动
  • copy <远程文件或目录> <远程文件或目录> :复制
  • mkdir <远程目录名称> :创建目录
  • list [远程目录名称] :列出文件
  • monitor [远程目录] [超时时间] :检视远程目录中的更改
  • share <远程文件> :创建文件共享链接
  • saveurl <URL> <远程目录> :下载文件到远程目录
  • search <关键词> :搜索远程内容
  • info :查询绑定 Dropbox 账户信息
  • space :查询 Dropbox 存储容量
  • unlink :取消绑定 Dropbox 账户

使用例子

# 上传文件
./dropbox_uploader.sh upload /etc/passwd /myfiles/passwd.old
# 上传带特殊字符文件
./dropbox_uploader.sh upload "My File.txt" "My File 2.txt"
# 下载文件
./dropbox_uploader.sh download /backup.zip
# 删除远程文件
./dropbox_uploader.sh delete /backup.zip
# 创建远程目录
./dropbox_uploader.sh mkdir /myDir/
# 为远程文件创建分享链接
./dropbox_uploader.sh share file.txt
# 列出远程目录文件
./dropbox_uploader.sh list

创建网站数据备份脚本并设置定时运行

创建一个网站备份脚本site_data_backup.sh,内容如下(按需修改其中内容)。

#!/usr/bin/env bash

# 导出完整数据库
# 若要备份单个数据库,用数据库名称替换其中 --all-databases 参数
mysqldump --user=root --password=123456 --all-databases > /root/db-backup.sql

# 打包备份文件
# 内容清单:/var/www(网站目录),/etc/nginx/conf.d( Nginx 配置文件),/root/db-backup.sql(数据库文件)
tar -zcpf /root/site-backup-$(date +%Y%m%d_%H%M%S).tgz -C /var www -C /etc/nginx conf.d -C /root db-backup.sql

# 清理导出数据库
rm -f /root/db-backup.sql

# 将备份文件上传到 Dropbox 网盘
cd /root && ./dropbox_uploader.sh upload /root/site-backup-*.tgz /

赋予脚本可执行权限。

chmod +x ./site_data_backup.sh

crontab -e添加定时执行任务。每个月运行一次备份并上传至 Dropbox 网盘。

0 0 1 * * /root/site_data_backup.sh 2>&1 >> /root/backup.log

发表评论

电邮地址用于 Gravatar 头像显示,不会被公开可见。