自动化 MongoDB 备份 — 生产就绪指南
Source: Dev.to
为什么备份很重要(比你想象的更重要)
生产环境的数据库会出现故障——人为失误、云服务中断、错误的部署或意外删除。唯一真正可靠的安全网是一个可靠的、自动化的备份系统,你能够在凌晨 3 点信任它进行恢复。
在本指南中,我们将逐步演示一个经过实战检验的 MongoDB 备份系统,使用以下技术构建:
mongodump/mongorestore- Node.js +
node-cron - Amazon S3
- MongoDB(作为备份元数据存储)
阅读完本指南后,你将了解如何安全地备份 MongoDB、将备份存储到 S3、清理旧备份,以及在灾难来临时完整恢复数据库。
系统目标
我们希望系统能够:
- 备份 多个 MongoDB 数据库
- 自动进行 每日、每周和每月 备份
- 将备份安全地存储在 S3 中
- 在 MongoDB 中跟踪所有信息
- 自动删除已过期的备份
- 能够 完整恢复已删除的数据库
- 无需手动步骤或冒险的捷径
核心概念:MongoDB 转储
MongoDB 提供了一个原生备份工具 mongodump。
mongodump --uri="" --archive --gzip --oplog
这段命令的作用
--archive→ 输出为单个文件(便于存储)--gzip→ 对备份进行压缩--oplog→ 为副本集确保一致性快照
结果:每次备份生成一个 .archive.gz 文件。此备份为只读——原始数据库永不被修改。
支持多个数据库
而不是硬编码单一数据库,定义一个通用的 MongoDB 连接列表:
const databases = [
{ name: "app-db", uri: process.env.MONGO_URI_1 },
{ name: "analytics-db", uri: process.env.MONGO_URI_2 }
];
每个条目:
- 使用相同的备份逻辑
- 生成各自的备份文件
- 分别存储元数据
这使系统保持通用且可复用。
Source: …
自动化 Cron 任务
所有备份都在 Node.js 应用中使用 node-cron 运行。
| 任务类型 | 计划 |
|---|---|
| 每日 | 每天 |
| 每周 | 每周日 |
| 每月 | 每月第一天 |
| 清理 | 每天 |
每个 cron 任务:
- 运行
mongodump - 将文件上传至 S3
- 在 MongoDB 中保存元数据
不需要外部的 cron 服务器。
S3 存储结构
备份会以 .archive.gz 文件形式上传到 S3 存储桶。推荐的文件夹结构:
s3://mongo-backups/
{dbName}/
daily/
weekly/
monthly/
{dbName}→ 已清理的 MongoDB 数据库名称daily | weekly | monthly→ 备份频率
生产安全规则
- 数据库名称已清理(小写,无空格)
- 文件仅在转储成功后上传
- 本地文件仅在 S3 上传成功后删除
此结构适用于任何项目或组织,并且可平稳扩展。
MongoDB中的备份元数据
MongoDB 存储通用的备份元数据,独立于任何公司或产品:
{
"dbName": "app-db",
"backupType": "daily",
"storageProvider": "s3",
"storageKey": "mongo-backups/app-db/daily/backup.archive.gz",
"createdAt": ISODate(),
"expireAt": ISODate()
}
为什么这很重要
- MongoDB 成为唯一可信来源
- 每个备份都可审计
- 清理逻辑安全且可预测
- 除非明确记录,否则不会删除任何内容
自动清理已过期的备份
一个单独的每日 cron 任务:
- 查找
expireAt < now的备份 - 从 S3 删除文件
- 从 MongoDB 删除记录
如果备份没有在 MongoDB 中记录,则 不会 被删除。这可防止意外的数据丢失和无限制的存储增长。
灾难恢复(恢复过程)
如果任何 MongoDB 数据库被删除或损坏:
步骤 1:下载最新备份
aws s3 cp s3://mongo-backups/{dbName}/daily/latest.archive.gz .
步骤 2:使用 mongorestore 恢复
mongorestore --gzip --archive=latest.archive.gz --drop
--drop清除现有数据- 数据库从归档中重建
此过程适用于任何 MongoDB 部署。
安全保证
- 原始数据库从不被修改
- 备份完整且一致
- 存储增长受到控制
- 每个备份都有记录
- 随时可以恢复
这是一套生产级别的方案,而非演示脚本。
最终思考
本指南演示了一种通用的、适用于生产环境的 MongoDB 备份策略,使用 mongodump、计划任务、S3 存储、MongoDB 跟踪的元数据、自动清理以及可靠的恢复流程——可适配任何项目或组织。
祝构建愉快 🚀