温馨提示×

MongoDB在Linux上的备份恢复策略

小樊
53
2025-10-03 23:09:34
栏目: 云计算

一、备份策略

1. 备份工具选择

  • mongodump/mongorestore:MongoDB自带工具,支持全量/增量备份、指定数据库/集合备份,备份格式为BSON(可读性强),适合中小规模数据库或需要灵活恢复的场景。
  • 文件系统快照:通过LVM、ZFS等文件系统创建快照,实现数据库一致性备份(需MongoDB运行在支持快照的文件系统上),适合大规模数据库或需要快速恢复的场景。
  • 第三方工具:如MMS(MongoDB Management Service),提供自动化备份、版本管理、异地存储功能,适合企业级复杂需求。

2. 备份类型组合

  • 全量备份:定期(如生产环境每日、开发环境每周)备份整个数据库,作为基础恢复点,确保数据完整性。
  • 增量备份:基于全量备份,每小时备份自上次备份以来的变更(通过--oplog参数记录操作日志),减少备份时间和存储占用。

3. 备份频率设置

  • 生产环境:每日全量备份+每小时增量备份,平衡数据安全性与存储成本。
  • 开发/测试环境:每周全量备份,降低资源消耗。

4. 备份保留策略

  • 分级保留:保留最近7天的每日备份、最近4周的每周备份、最近12个月的每月备份,满足不同时间段的恢复需求(如近期数据快速恢复、历史数据长期归档)。

5. 备份存储与安全

  • 存储介质:优先选择异地存储(如云存储、NAS),防止本地灾难(如硬盘损坏、火灾)导致数据丢失;本地存储用于快速恢复。
  • 数据加密:对敏感数据备份进行加密(如使用GPG加密备份文件),避免数据泄露。
  • 权限控制:备份目录设置严格权限(如chmod -R 700 /backups/mongodb),仅允许管理员访问。

6. 自动化与监控

  • 自动化脚本:使用Shell脚本整合mongodump、压缩(tar -zcvf)、清理旧备份(find /backups -mtime +7 -delete)等操作,减少人工干预。
  • 定时任务:通过crontab设置定时执行备份脚本(如每天凌晨2点执行),确保备份规律性。
  • 监控告警:使用Prometheus+Granafa监控备份状态(如backup_status指标),设置失败告警(邮件/短信通知),及时处理备份异常。

二、恢复策略

1. 恢复前准备

  • 停止写操作:恢复前停止应用对数据库的写操作(或停止MongoDB服务),防止数据覆盖。
  • 备份当前数据:恢复前备份现有MongoDB数据文件(如/var/lib/mongodb),避免恢复失败导致二次丢失。
  • 验证备份完整性:使用mongorestore --dryRun命令模拟恢复过程,检查备份文件是否可用。

2. 恢复工具与命令

  • mongorestore基础恢复
    • 恢复全量备份:mongorestore --host <hostname> --port <port> /path/to/full_backup(恢复整个数据库)。
    • 恢复指定数据库:mongorestore --host <hostname> --port <port> --db <db_name> /path/to/backup
    • 恢复指定集合:mongorestore --host <hostname> --port <port> --db <db_name> --collection <coll_name> /path/to/backup/<coll_name>.bson
  • 时间点恢复(PITR)
    结合oplog恢复到指定时间点,需备份时包含oplog(mongodump --oplog)。命令示例:mongorestore --oplogReplay --oplogLimit "2025-01-01T12:00:00Z" /path/to/full_backup(恢复到2025-01-01 12:00:00的状态)。
  • 文件系统恢复
    若使用文件系统快照,直接将快照复制到MongoDB数据目录(如/var/lib/mongodb),重启服务即可。

3. 恢复后操作

  • 启动服务:恢复完成后启动MongoDB服务(sudo systemctl start mongod)。
  • 验证数据:登录MongoDB shell(mongo),检查数据库、集合是否存在,数据是否完整(如show dbs; use <db_name>; db.<coll_name>.find())。
  • 权限调整:若恢复到其他主机,修改数据文件权限(sudo chown -R mongodb:mongodb /var/lib/mongodb),确保MongoDB用户可访问。

0