温馨提示×

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

小樊
40
2025-12-28 06:33:55
栏目: 云计算

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

一 备份策略选型

  • 逻辑备份:使用官方工具 mongodump/mongorestore,导出为 BSON,支持按库、按集合、按查询条件导出,便于迁移与部分恢复,适合大多数场景与中小规模数据。可配合 –gzip 压缩节省存储。
  • 物理备份:直接拷贝数据目录(默认 /var/lib/mongodb),恢复速度快,适合大规模与低RTO需求;需保证一致性(停机或使用快照)。
  • 文件系统快照:借助 LVM/ZFS/云盘快照 获取一致性时间点副本,性能与一致性兼顾,适合生产环境。
  • 增量与时点恢复:在 副本集 环境使用 oplog 实现增量备份与时间点恢复(PITR)。
  • 第三方工具:如 Percona Backup for MongoDB(支持全量/增量、加密、并行)、Bacula;托管云可用 MongoDB Atlas 备份(自动全量/增量与PITR)。

二 自动化与存储管理

  • 定时全量备份脚本示例(含压缩与归档):
    #!/bin/bash
    BACKUP_DIR="/backup/mongodb"
    DATE=$(date +%Y%m%d%H%M%S)
    mkdir -p "$BACKUP_DIR/$DATE"
    mongodump --out "$BACKUP_DIR/$DATE" --gzip >> "$BACKUP_DIR/backup.log" 2>&1
    tar -czf "$BACKUP_DIR/${DATE}.tar.gz" -C "$BACKUP_DIR" "$DATE"
    rm -rf "$BACKUP_DIR/$DATE"
    echo "$(date): Backup completed: $BACKUP_DIR/${DATE}.tar.gz" >> "$BACKUP_DIR/backup.log"
    
    使用 crontab 每天 02:00 执行:0 2 * * * /data/backup/mongodb_backup.sh
  • 异地与清理:将备份 同步到远程主机/云存储(如 rsync);定期清理旧备份,例如保留 7 天:find /backup/mongodb -type f -mtime +7 -delete
  • 监控与告警:记录 开始/结束时间、文件大小、错误信息 到日志;结合 Prometheus+Grafana 设置失败告警。

三 全量与增量备份操作要点

  • 全量备份(mongodump):
    • 备份单库:mongodump --db mydb --out /backup/mongodb --gzip
    • 备份单集合:mongodump --db mydb --collection users --out /backup/mongodb --gzip
    • 认证备份:mongodump --host localhost --port 27017 --username admin --password '******' --authenticationDatabase admin --out /backup/mongodb --gzip
  • 增量备份(副本集):
    • 基于 oplog 的增量:mongodump --oplog --out /backup/mongodb_incremental(确保实例为 副本集 且 oplog 可用)
  • 文件系统/快照:
    • 停机一致性拷贝:systemctl stop mongod && cp -r /var/lib/mongodb /backup/mongodb_physical && systemctl start mongod
    • 建议结合 LVM/ZFS 快照或云盘快照减少停机窗口。

四 恢复流程与验证

  • 逻辑恢复(mongorestore):
    • 恢复到同库:mongorestore --db mydb /backup/mongodb/mydb
    • 恢复到新库:mongorestore --db test /backup/mongodb/mydb
    • 从压缩归档恢复:mongorestore --gzip --archive=/path/to/backup/mongo_backup.gz
    • 认证恢复:在命令中添加 –username/–password/–authenticationDatabase
  • 物理恢复:
    • 建议先停库,将备份数据目录拷回 /var/lib/mongodb,确保权限一致后启动:systemctl stop mongod && cp -r /backup/mongodb_physical /var/lib/mongodb && systemctl start mongod
  • 恢复前准备与验证:
    • 恢复前先备份当前数据目录(防止误操作);恢复后在 mongosh 中校验集合行数、索引与关键业务数据;定期做 恢复演练dry-run 验证备份可用性。

五 生产环境注意事项与故障应对

  • 高可用优先:配置 副本集,必要时从 隐藏/延迟节点 执行备份,降低对线上影响。
  • 一致性保障:逻辑备份尽量在 维护窗口 或低峰期进行;物理/快照方案优先。
  • 版本与兼容:确保 备份与恢复 MongoDB 版本兼容;跨大版本恢复需评估兼容性策略。
  • 安全合规:备份文件 加密存储与传输,最小权限访问;启用 审计日志 追踪备份/恢复操作。
  • 故障排查:查看 /var/log/mongodb/mongod.log;检查 磁盘空间(df/du)网络连接;必要时尝试 mongod --repair 或从副本集重建异常节点。

0