Linux rclone全自动备份教程:一键备份网站、MySQL 数据库、Nginx 配置到雨云对象存储

作者:一位曾因手滑 rm -rf / 丢失站点的所有数据
适用环境:Linux(Ubuntu/CentOS)+ Nginx + MySQL/MariaDB + 自建博客(WordPress/Typecho/Hugo 等)
核心成果:每天凌晨自动将 网站文件、全部数据库、Nginx 配置、访问日志 加密上传至雨云对象存储,7 天前旧备份自动清理,月成本不到 1 元。

一、为什么需要“真·全量备份”?

很多站长以为“装个 WP 插件备份数据库就够了”,但真实灾难往往来自:

  • 误删 Nginx 配置导致站点无法访问
  • 服务器被黑后整个 /var/www 被植入木马
  • 数据库恢复了,但不知道当初用了什么 PHP 版本或 rewrite 规则

真正的容灾 = 网站代码 + 所有数据库 + 服务配置 + 日志记录。

本文教你用开源工具 rclone + 国产对象存储 雨云(Rainyun),一键实现全自动异地备份。

二、准备工作:开通雨云并获取 S3 密钥

环境:Ubuntu 22.04 + Nginx 1.18 + MySQL 8.0 + rclone 1.68+

那么我推荐 雨云  (邀请链接 https://www.rainyun.com/NDE5NTk1_),我目前正在使用的服务器就是雨云家的湖北十堰高防云服务器。

  • 雨云 是具有IDC资质的IDC厂商,并非三无厂商
  • 雨云 的湖北区域云服务具有高防能力,提供高达100G的防御。

1.访问 雨云官网 注册账号(支持支付宝)

2.进入 控制台 → 对象存储 → 创建 Bucket

  • 名称示例:myblog-backup-2026
  • 权限:私有

3.在 API 密钥 页面创建一对密钥:

  • Access Key ID(如 RY1234567890ABCDEF
  • Secret Access Key(一长串随机字符)

雨云 S3 兼容地址为:s3.rainyun.com

三、安装并配置 rclone(连接雨云)

在服务器执行:

# Ubuntu/Debian
#更新本地软件包索引和安装rclone
sudo apt update && sudo apt install rclone -y

# CentOS/RHEL
#安装rclone
sudo yum install rclone -y

运行配置向导:

rclone config
按提示输入:
  • n → 新建 remote
  • 名称:rainyun-backup
  • 类型:s3
  • provider:Other
  • access_key_id / secret_access_key:填入雨云提供的密钥
  • endpoint:s3.rainyun.com
  • region:留空
  • acl:private
  • 之后全部默认,我们输入回车即可,来到下面的提示,我们输入n

  • 之后会出现我们的配置信息:

之后输入y 会显示如下选项,再次输入q 退出配置即可。至此我们完成Rclone配置。

测试连接:

rclone lsd rainyun-backup:

看到你的 Bucket 列表即成功。

四、关键问题解答:备份“所有数据库”用哪个密码?

❓ mysqldump --all-databases 要用哪个数据库的密码?
❌ 误解:以为每个数据库有自己的密码。
✅ 真相:MySQL 中 数据库没有密码,用户才有密码

正确做法:

你需要一个 能访问所有数据库的 MySQL 用户账号,例如:
  • root(权限最大,不推荐日常使用)
  • 或专门创建的 backup 用户(推荐)

创建专用备份用户(安全最佳实践):

CREATE USER 'backup'@'localhost' IDENTIFIED BY '!@#2026';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER, RELOAD ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;
EXIT;

backup:用户名

!@#2026:用户密码

🔐 权限说明:
ON *.* 表示对所有数据库有权限
不需要 INSERT/DELETE,只读足够备份

五、安全配置:使用 .my.cnf 避免脚本暴露密码

创建凭据文件:

sudo nano /root/.my.cnf

填入(替换为你的用户名和密码):

[client]
user = backup
password = '强密码!@#2026'
host = localhost

设置安全权限(必须!):

chmod 600 /root/.my.cnf

现在,mysqldump 可通过 --defaults-file=/root/.my.cnf 安全读取凭据,无需在脚本中写密码

六、编写全自动备份脚本(覆盖四大核心)

创建脚本:

sudo nano /root/blog-backup.sh

粘贴以下完整代码:

#!/bin/bash
# 全栈博客备份脚本 v1.0
# 备份:网站文件 + 所有数据库 + Nginx 配置 + 访问日志
# 作者:Lonelycity
# 最后更新:2026年1月

set -e

DATE=$(date +%Y%m%d-%H%M)
BACKUP_DIR="/tmp/blog_backup_$$"
BUCKET="rainyun-backup:myblog-backup-2026"  # ← 替换为你的 Bucket 名

LOG_FILE="/var/log/blog-backup.log"
WEBSITE_PATH="/var/www/html"
NGINX_CONF="/etc/nginx"
NGINX_LOGS="/var/log/nginx"

mkdir -p "$BACKUP_DIR"

log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

log "🚀 开始全量备份..."

# 1. 网站文件
log "📦 打包网站文件..."
tar -czf "$BACKUP_DIR/website-$DATE.tar.gz" -C "$WEBSITE_PATH" .

# 2. 所有数据库(使用 .my.cnf 凭据)
log "💾 导出所有数据库..."
mysqldump --defaults-file=/root/.my.cnf --single-transaction --routines --triggers --all-databases | gzip > "$BACKUP_DIR/db-$DATE.sql.gz"

# 3. Nginx 配置
log "⚙️  打包 Nginx 配置..."
tar -czf "$BACKUP_DIR/nginx-conf-$DATE.tar.gz" -C "$NGINX_CONF" .

# 4. Nginx 日志
log "📜 打包访问日志..."
tar -czf "$BACKUP_DIR/nginx-logs-$DATE.tar.gz" -C "$NGINX_LOGS" .

# 5. 上传到雨云
log "☁️  上传到雨云对象存储..."
rclone copy "$BACKUP_DIR/" "$BUCKET/backups/$DATE/" --progress

# 6. 清理
rm -rf "$BACKUP_DIR"
log "✅ 备份完成!云端路径:$BUCKET/backups/$DATE/"

赋予执行权限:

chmod +x /root/blog-backup.sh

手动测试:

sudo /root/blog-backup.sh

检查 /var/log/blog-backup.log 是否成功。

七、设置每日自动执行(cron)

sudo crontab -e

添加:

0 2 * * * /root/blog-backup.sh >/dev/null 2>&1

💡 使用 sudo crontab 是因为需要 root 权限读取 /etc/nginx 和 /var/log/nginx

八、自动清理旧备份(防费用失控)

登录雨云控制台 → 对象存储 → 你的 Bucket → 生命周期管理
  • 前缀:backups/
  • 操作:过期删除
  • 天数:7
7 天前的备份将自动删除,月存储成本 ≈ ¥0.1 元。

九、(可选)端到端加密:防止数据泄露

若担心云服务商窥探,可用 rclone crypt 加密:

rclone config
# 类型选 crypt
# remote 填 rainyun-backup:myblog-backup-2026/encrypted
# 设置密码(务必离线保存!)

然后将脚本中的 BUCKET 改为 your-crypt-name:,所有上传内容将自动加密(连文件名都不可读)。

十、总结:你备份了什么?

项目 路径 是否包含
所有网站文件 /var/www/html
所有 MySQL 数据库 —— ✅(通过 --all-databases
Nginx 配置 /etc/nginx
访问/错误日志 /var/log/nginx

🔔 再次强调:数据库备份用的是 MySQL 用户(如 backup)的密码,不是某个数据库的密码。只要该用户有 ON *.* 权限,就能备份全部库。

附:一键检查清单

  • 雨云 Bucket 已创建,密钥已记录
  • rclone config 测试通过
  • /root/.my.cnf 权限为 600
  • 备份脚本手动运行成功
  • sudo crontab -e 已添加定时任务
  • 雨云生命周期规则已设置

你的博客,值得被完整守护。
从此,无论服务器宕机、被黑还是误操作,你都能在 30 分钟内从零重建整站。

阅读剩余
THE END