自动化 MongoDB 备份 — 生产就绪指南

发布: (2026年2月6日 GMT+8 22:16)
6 分钟阅读
原文: Dev.to

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 任务:

  1. 运行 mongodump
  2. 将文件上传至 S3
  3. 在 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 任务:

  1. 查找 expireAt < now 的备份
  2. 从 S3 删除文件
  3. 从 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 跟踪的元数据、自动清理以及可靠的恢复流程——可适配任何项目或组织。

祝构建愉快 🚀

Back to Blog

相关文章

阅读更多 »

量子安全计算的不安全性

量子隐私:为何某些量子技巧无法保护秘密安全 人们曾希望量子技术能够阻止陌生人窃取秘密,就像智能卡……