MongoDB在Linux上的数据备份策略
小樊
37
2025-11-26 20:16:43
MongoDB 在 Linux 上的备份策略
一 策略总览与 RPO RTO
- 备份类型与适用
- 逻辑备份:使用 mongodump 导出为 BSON,便于按库/集合恢复与迁移,适合中小型数据量与灵活恢复需求。
- 物理备份:直接拷贝数据文件(如 /var/lib/mongodb),一致性要求高、速度快,适合大体量或低 RTO 场景(通常需停库或使用快照)。
- 实时可用性:通过 副本集 提供热备与近实时备份源,必要时从从节点导出,降低主库压力。
- 文件系统快照:在支持快照的 LVM/ZFS 等上执行快照,可获得接近实时的备份点(需保证文件系统与存储一致性)。
- 第三方工具:如 Percona Backup for MongoDB(支持增量、全量)、ClusterControl(备份与监控一体化)。
- 频率与保留
- 关键业务:建议每日全量;结合 oplog 做时间点恢复(PITR);保留至少 7–30 天 备份,按合规延长。
- 一般业务:每日全量;保留 7–15 天;每周做一份离线归档。
- 存储与异地
- 本地快速层 + 对象存储/异地机房分层存储;至少跨 两个物理位置 保存备份。
- 目标指标
- RPO(恢复点目标):两次备份间允许丢失的数据时间窗口(如 24 小时、1 小时)。
- RTO(恢复时间目标):从故障到恢复可用的时间(如 1 小时、4 小时)。策略设计与演练应围绕可接受的 RPO/RTO 制定。
二 备份方法选型与关键命令
- 逻辑备份(mongodump)
- 全库:mongodump --out /backup/2025-11-26 --gzip
- 指定库:mongodump --db mydb --out /backup/mydb_2025-11-26 --gzip
- 指定集合:mongodump --db mydb --collection logs --query ‘{level:“error”}’ --out /backup/mydb_logs_err_2025-11-26 --gzip
- 认证:mongodump --host 10.0.0.10:27017 --username backup --password “$PASS” --authenticationDatabase admin --out /backup/auth_2025-11-26 --gzip
- 逻辑恢复(mongorestore)
- 全库:mongorestore --gzip /backup/2025-11-26
- 指定库/集合:mongorestore --gzip --db mydb /backup/2025-11-26/mydb
- 谨慎使用:–drop 会在恢复前删除目标库/集合数据,确保不会误删生产数据。
- 物理备份
- 停库拷贝:systemctl stop mongod;cp -a /var/lib/mongodb /backup/mongo_fs_2025-11-26;systemctl start mongod
- 在线一致性:优先使用支持一致性的文件系统/存储快照,避免停库。
- 副本集利用
- 在从节点执行 mongodump,降低主库影响;必要时为备份创建隐藏/延迟节点专用于导出。
- 时间点恢复(PITR)
- 前提:部署并正确配置 oplog;使用支持 oplog 的备份工具(如 Percona Backup for MongoDB)获取任意时间点备份点。
三 定时与自动化脚本示例
- 全量备份脚本(含压缩、保留、清理)
- 关键点:使用 –gzip 减少体积;按日期分层;自动清理 N 天前 归档;记录日志便于审计与告警。
- 示例(保留 15 天):
- BACKUP_DIR=/data/backup/mongo
- DATE=$(date +%F_%H-%M-%S)
- OUT_DIR=$BACKUP_DIR/$DATE
- mkdir -p $OUT_DIR
- mongodump --out $OUT_DIR --gzip --authenticationDatabase admin
- tar czf $BACKUP_DIR/mongo_$DATE.tar.gz -C $OUT_DIR .
- find $BACKUP_DIR -name “mongo_*.tar.gz” -mtime +15 -delete
- echo “Backup $DATE finished, kept last 15 days” >> $BACKUP_DIR/backup.log
- 定时任务(crontab)
- 每天 02:00 全量备份:0 2 * * * /usr/local/bin/mongodump --out /data/backup/mongo/$(date +%F) --gzip --authenticationDatabase admin
- 每周日 03:00 归档并清理临时目录:0 3 * * 0 find /data/backup/mongo -maxdepth 1 -type d -mtime +1 -exec rm -rf {} ;
- 建议将脚本放入 /usr/local/bin/ 并 chmod +x,日志统一落盘便于监控告警。
四 恢复流程与演练
- 逻辑备份恢复
- 全库:mongorestore --gzip /backup/2025-11-26
- 指定库/集合:mongorestore --gzip --db mydb /backup/2025-11-26/mydb
- 谨慎:–drop 会清空目标数据,生产恢复前务必在预备环境验证。
- 物理备份恢复
- 停库、备份当前数据目录(可选)、将备份拷回 /var/lib/mongodb、校正权限与属主、启动服务并校验。
- 时间点恢复(PITR)
- 选择最近的全量备份点 + 回放 oplog 至目标时间点;使用支持 PITR 的工具(如 Percona Backup for MongoDB)执行。
- 验证与演练
- 定期在预备环境执行真实恢复演练,校验数据一致性、索引/视图/触发器、应用连通性与性能;形成演练报告与改进清单。
五 安全与运维最佳实践
- 安全
- 备份文件加密与最小权限访问;凭据使用 –authenticationDatabase 与凭据文件/密钥管理,避免硬编码。
- 传输到异地/云端时使用 TLS 或校验和(如 sha256sum)确保完整性与机密性。
- 监控与告警
- 监控备份任务退出码、备份大小与耗时、保留天数;失败即时告警(如企业微信/钉钉/邮件)。
- 可结合 Prometheus 记录备份状态并设置告警规则,确保问题可被及时感知与处置。
- 高可用与架构
- 生产环境优先使用 副本集 提供高可用与安全的备份来源;必要时为备份配置 隐藏/延迟 节点,避免业务高峰干扰。
- 工具与平台
- 云上 MongoDB Atlas 提供内置备份能力;本地自建可考虑 Percona Backup for MongoDB、ClusterControl 等一体化方案。