温馨提示×

MongoDB在Linux上的备份与恢复实践

小樊
33
2025-12-26 07:48:58
栏目: 云计算

MongoDB 在 Linux 上的备份与恢复实践

一 备份方式选型

  • 逻辑备份:使用 mongodump 导出为 BSON,适合跨版本迁移、选择性恢复、中小规模数据;对运行性能有影响,建议在业务低峰期执行。默认不备份 local 库,且备份的是文档数据,索引元数据会一并导出,但恢复后可能需要重建部分索引或优化。
  • 物理备份:直接拷贝数据目录(如 /var/lib/mongodb),适合大数据量、要求快速恢复的场景;通常需停库或使用文件系统快照以保证一致性。
  • 实时/近实时:通过 副本集 实现高可用,必要时从 Secondary 节点导出,降低对主库影响。
  • 时间点恢复:在 副本集 环境使用 –oplog 获取备份窗口内的操作,实现近实时恢复。

二 逻辑备份与定时任务

  • 全库备份(示例含认证与压缩)
    mongodump \
      --host 127.0.0.1 --port 27017 \
      -u root -p 'YourStrongPass!' \
      --authenticationDatabase admin \
      --gzip \
      --out /data/backup/mongo/$(date +%F_%H-%M-%S)
    
  • 单库/单集合
    # 单库
    mongodump -h 127.0.0.1 -u root -p 'YourStrongPass!' --authenticationDatabase admin -d mydb --gzip -o /data/backup/mongo/mydb_$(date +%F)
    
    # 单集合
    mongodump -h 127.0.0.1 -u root -p 'YourStrongPass!' --authenticationDatabase admin \
      -d mydb -c mycoll --gzip -o /data/backup/mongo/mydb_mycoll_$(date +%F)
    
  • 定时任务(crontab)
    # 每天 02:00 全库备份
    0 2 * * * /usr/bin/mongodump --host 127.0.0.1 --port 27017 -u root -p 'YourStrongPass!' \
      --authenticationDatabase admin --gzip \
      --out /data/backup/mongo/$(date +\%F_\%H-\%M-\%S) >> /var/log/mongo_backup.log 2>&1
    
    提示:crontab 中 % 需转义为 \%;备份目录需提前创建并保障磁盘空间与权限。

三 时间点恢复与副本集实践

  • 前提:MongoDB 为 副本集,备份在 Secondary 节点执行以减少对业务影响。
  • 备份命令(含 oplog)
    mongodump --host rs0/10.0.0.11:27017,10.0.0.12:27017 \
      -u backup -p 'BackupPass!' --authenticationDatabase admin \
      --oplog --gzip \
      -o /data/backup/mongo/point_in_time_$(date +%F_%H-%M-%S)
    
  • 恢复命令(重放 oplog 到指定时间点)
    mongorestore --host 127.0.0.1:27017 -u root -p 'YourStrongPass!' \
      --authenticationDatabase admin \
      --oplogReplay \
      /data/backup/mongo/point_in_time_2025-08-15_02-00-00
    
    说明:时间点恢复仅对全库备份有效;如只需单库/单集合,请采用常规逻辑恢复并在应用侧控制窗口期数据一致性。

四 物理备份与文件系统快照

  • 物理备份(停机拷贝,简单可靠)
    sudo systemctl stop mongod
    sudo rsync -a /var/lib/mongodb/ /data/backup/mongo/physical_$(date +%F)/
    sudo systemctl start mongod
    
  • 文件系统快照(LVM、云盘快照等):在快照前确保写一致性(如短暂冻结、从 Secondary 节点操作),快照完成后按快照恢复数据目录并启动服务。
  • 适用场景:大数据量、RTO 要求更低的场景;恢复时直接还原数据文件并启动实例。

五 恢复操作与关键注意事项

  • 常用恢复命令
    # 全库恢复(追加导入)
    mongorestore -h 127.0.0.1 -u root -p 'YourStrongPass!' \
      --authenticationDatabase admin \
      /data/backup/mongo/2025-08-15_02-00-00
    
    # 全库恢复(先删后导)
    mongorestore -h 127.0.0.1 -u root -p 'YourStrongPass!' \
      --authenticationDatabase admin --drop \
      /data/backup/mongo/2025-08-15_02-00-00
    
    # 单库恢复
    mongorestore -h 127.0.0.1 -u root -p 'YourStrongPass!' \
      --authenticationDatabase admin -d mydb \
      /data/backup/mongo/2025-08-15_02-00-00/mydb
    
    # 单集合恢复
    mongorestore -h 127.0.0.1 -u root -p 'YourStrongPass!' \
      --authenticationDatabase admin -d mydb -c mycoll \
      /data/backup/mongo/2025-08-15_02-00-00/mydb/mycoll.bson.gz --gzip
    
  • 重要注意事项
    • 使用 –drop 会先删除目标库/集合数据,务必确认目标环境;时间点恢复使用 –oplogReplay,且仅对全库备份有效。
    • 逻辑备份对性能有影响,建议在低峰期执行;mongodump 默认不备份 local 库
    • 备份完成后务必进行“可恢复性验证”:检查备份目录结构、集合与索引、抽样记录数,并进行小规模演练恢复。
    • 安全性:备份文件包含敏感数据,建议加密存储并限制访问权限;传输到异地/云端时启用加密通道。
    • 监控与保留:对备份任务做日志与告警,按业务 RPO/RTO 设定保留周期与多副本策略(本地/NAS/云)。

0