CentOS 上 MongoDB 备份与恢复实践
一 环境准备与工具安装
- 确认已安装 MongoDB 工具包(包含 mongodump/mongorestore)。如未安装,执行:sudo yum install -y mongodb-org-tools。
- 规划备份目录(示例:/backup/mongodb),并确保运行备份的用户对目录有读写权限。
- 备份会产生较大 I/O 与 网络 开销,建议在业务低峰期执行;如为生产环境,优先在副本集的 Secondary 节点上执行导出,降低对线上影响。
二 逻辑备份与恢复(mongodump/mongorestore)
- 全量备份到目录(含时间戳)
- 命令:mongodump --out /backup/mongodb/$(date +%Y-%m-%d_%H-%M-%S)
- 备份单个库/集合
- 命令:mongodump -d mydb -o /backup/mongodb
- 命令:mongodump -d mydb -c users -o /backup/mongodb
- 启用认证的备份
- 命令:mongodump -h localhost -u myuser -p mypass --authenticationDatabase admin -o /backup/mongodb
- 压缩归档(可选)
- 打包:tar -czvf /backup/mongodb_$(date +%F).tar.gz -C /backup/mongodb ./
- 恢复整个目录
- 解压:tar -xzvf /backup/mongodb_2025-08-01.tar.gz -C /
- 恢复:mongorestore /backup/mongodb_2025-08-01
- 恢复到指定库/集合
- 库级:mongorestore -d mydb /backup/mongodb_2025-08-01/mydb
- 集合级:mongorestore -d mydb -c users /backup/mongodb_2025-08-01/mydb/users.bson
- 远程/自动化
- 远程拷贝:rsync -avz /backup/mongodb/ user@remote:/path/to/backup
- 定时任务(每天 02:00 全量备份):
- 0 2 * * * /usr/bin/mongodump --out /backup/mongodb/$(date +%Y%m%d)
- 说明
- 逻辑备份对业务影响小、跨版本/跨平台迁移友好;大数据量或严格 RPO 场景可结合“时间点恢复”。
三 时间点恢复(Oplog Replay)
- 适用前提
- 部署为 副本集 或 分片集群,且 local.oplog.rs 可访问;备份时包含 –oplog 以捕获一致性点之后的操作。
- 操作步骤
- 做包含 oplog 的基础备份
- 命令:mongodump -u root -p 123456 --authenticationDatabase admin --oplog -o /tmp/bak
- 在 local.oplog.rs 中定位误操作时间点(示例为删除集合)
- 命令:db.getCollection(‘oplog.rs’).find({ns:“ceshi.$cmd”})
- 关键字段:op:“c”(命令)、“drop”:“t1”、ts(时间戳)
- 导出基础备份时刻到误操作时刻之间的 oplog 片段
- 命令:mongodump -u root -p 123456 --authenticationDatabase admin -d local -c oplog.rs -q ‘{ts:{$lt:Timestamp(1575793969,1),$gt:Timestamp(1575793846,1)}}’ -o /tmp/zl
- 启动临时实例(端口 27018),先导入基础备份并回放 oplog
- 启动:mongod --dbpath /root/mtmp --logpath /root/mtmp/27018.log --port 27018 --bind_ip_all
- 恢复:mongorestore --port 27018 --oplogReplay /tmp/bak
- 校验数据后,按需要导出/迁移回生产。
- 说明
- Oplog 具备近似幂等性,回放重复记录通常安全;务必确保导出 oplog 的时间窗覆盖从备份开始到目标恢复时刻。
四 自动化与保留策略
- 备份脚本示例(含压缩与 7 天保留)
- 文件:/data/backup/mongod.sh
- 内容:
- #!/bin/sh
- DUMP=/usr/bin/mongodump
- OUT_DIR=/data/backup/mongod/tmp
- TAR_DIR=/data/backup/mongod
- DATE=$(date +%Y_%m_%d_%H_%M_%S)
- DB_USER=db_user; DB_PASS=db_pass; DAYS=7
- TAR_BAK=“${TAR_DIR}/${DATE}.tar.gz”
- mkdir -p ${OUT_DIR}/${DATE}
- $DUMP -u $DB_USER -p $DB_PASS -o ${OUT_DIR}/${DATE}
- tar -zcvf $TAR_BAK -C ${OUT_DIR} ./${DATE##*/}
- find $TAR_DIR/ -mtime +$DAYS -type f -delete
- 赋权与定时:chmod +x /data/backup/mongod.sh;crontab -e 添加:0 2 * * * root /data/backup/mongod.sh
- 建议
- 保留周期按 RPO/RTO 设定(如 7–30 天);定期做恢复演练与校验(校验集合计数、重要文档抽样)。
五 注意事项与常见问题
- 权限与安全
- 备份/恢复账号需具备相应角色(如 backup/restore 或更高);避免在脚本中明文存放密码,可使用 Keyfile 或外部凭据管理。
- 服务与一致性
- 逻辑导出通常无需停库;如采用文件拷贝方式做“物理恢复”,需先停库并备份当前数据目录,恢复后校正权限(chown -R mongod:mongod /var/lib/mongo)再启动。
- 性能与影响
- 大库导出建议在 Secondary 节点执行;限制并发与速率、选择低峰时段;压缩/传输与磁盘 I/O 需提前评估。
- 版本与兼容性
- mongodump/mongorestore 的版本尽量与目标实例一致;跨大版本恢复需先在测试环境验证。
- 监控与告警
- 对备份成功率、备份耗时、磁盘空间、保留天数设置监控与告警,确保可及时处置异常。