数据是无价的,而服务器的硬盘往往是不可靠或有限的。为了确保数据库安全并节省本地空间,最优雅的方案莫过于将备份自动同步到云端。本文将手把手教你如何利用 Rclone 打造一套从配置到授权、再到脚本自动化的全流程备份系统。

1. 为什么选择 Rclone?

Rclone 被称为“云端存储的瑞士军刀”。它支持超过 40 种云存储(如 Google Drive, OneDrive, Dropbox),并能像操作本地文件一样同步数据。

2. 避坑指南:服务账号 vs 个人授权

在配置 Google Drive 时,新手最常遇到的报错是 403: Service Accounts do not have storage quota

  • 原因:服务账号(JSON)默认存储空间为 0GB。
  • 对策:个人开发者建议使用 OAuth2 授权模式。这样备份将直接占用你个人账号的 15GB 免费空间,配置更简单且无配额限制。

3. 核心配置流程

第一步:服务器端初始化

在服务器上运行:

rclone config
  1. 输入 n 新建远程连接,命名为 gdrive
  2. 选择 Google Drive
  3. client_idclient_secret:直接回车跳过。
  4. scope:输入 1 (Full access)。
  5. service_account_file留空(直接回车)
  6. Edit advanced config?:输入 n
  7. Use auto config?:输入 n (因为服务器没有浏览器)。

此时,服务器会显示一行命令,例如:rclone authorize "drive" "eyJz..."。请保持这个窗口不要关闭。


第二步:本地电脑获取授权 (核心环节)

由于服务器无法弹出浏览器,我们需要在自己的电脑(Windows 或 Mac)上完成登录。

1. 准备本地工具

  • 下载:前往 Rclone 官网 下载对应系统的 ZIP 包。
  • 解压:解压到桌面,例如文件夹名为 rclone

2. 运行授权命令

  • Windows:在解压文件夹内,按住 Shift + 右键,选择“在此处打开 PowerShell”。
  • Mac/Linux:打开终端并进入该目录。

输入服务器给你的那行代码:

# 格式为:./rclone.exe authorize "存储类型" "服务器给的代码"
./rclone.exe authorize "drive" "服务器给的代码"

3. 浏览器登录

  1. 运行命令后,本地发动机会自动打开浏览器,跳转到 Google 登录页。
  2. 登录你的 Gmail 账号,并在授权页面点击 “允许 (Allow)”
  3. 浏览器显示 “Success!” 后,返回你的本地终端。

4. 复制 Token

你会看到一段以 {"access_token": ...} 开头的长代码。完整复制这段代码,回到服务器粘贴进去。


第三步:编写自动化备份脚本

创建一个名为 /root/backup_db.sh 的脚本:

#!/bin/bash

# --- 配置区 ---
DB_USER="root"
DB_PASS="你的数据库密码"
LOCAL_DIR="/root/db_backups"
REMOTE_NAME="gdrive"
REMOTE_FOLDER="backup"  # 对应谷歌硬盘中的目录名
DATE=$(date +%Y%m%d_%H%M)
FILE_NAME="db_backup_$DATE.sql.gz"

# 1. 导出并压缩
mkdir -p $LOCAL_DIR
mysqldump -u$DB_USER -p$DB_PASS --all-databases | gzip > $LOCAL_DIR/$FILE_NAME

# 2. 上传至云端
# 如果你使用的是共享文件夹,请在末尾加上 --drive-shared-with-me
rclone copy $LOCAL_DIR/$FILE_NAME $REMOTE_NAME:$REMOTE_FOLDER -P

# 3. 清理 7 天前的本地旧备份
find $LOCAL_DIR -mtime +7 -type f -delete

echo "✅ 备份任务于 $DATE 完成!"

第四步:设置 Cron 定时任务

让脚本在每天凌晨 3:00 自动执行:

crontab -e

添加以下行:

0 3 * * * /bin/bash /root/backup_db.sh > /dev/null 2>&1

4. 常见问题排查

  • Token 过期:授权代码有时效性,如果复制太慢会报错,重新获取即可。
  • 权限不足:确保备份脚本有执行权限:chmod +x /root/backup_db.sh
  • 找不到文件夹:如果在 Rclone 列表里看不到别人分享给你的文件夹,请在配置时开启高级设置里的 shared_with_me

5. 总结

通过 Rclone 本地授权配合服务器端的定时任务,我们建立了一套稳健的异地备份机制。这套系统不仅适用于数据库,也适用于备份网站源码、日志等任何重要文件。