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用户可访问。