Ubuntu 上 MongoDB 数据恢复实操指南
一 恢复前准备
- 确认备份类型与位置:常见为 mongodump 生成的 BSON 目录,或包含 oplog 的时间点备份。
- 准备恢复环境:安装同版本 MongoDB,确保磁盘空间充足,网络与权限配置正确。
- 权限与安全:如使用鉴权,准备具有 读备份、写目标库 权限的账户;在目标库为生产环境时,优先选择 维护窗口 或先恢复到 临时库 验证。
- 服务与数据保护:必要时先对现有数据做一份 mongodump 留底;恢复命令示例见下文各场景。
二 使用 mongorestore 从 BSON 备份恢复
- 全量恢复到现有实例(不覆盖同名库的集合):
mongorestore --host localhost --port 27017 /path/to/backup/folder
- 恢复到指定数据库(可与备份库名不同):
mongorestore --host localhost --port 27017 --db myDatabase /path/to/backup/folder/myDatabase
- 覆盖式恢复(先删后插,谨慎使用):
mongorestore --host localhost --port 27017 -d myDatabase --drop /path/to/backup/folder/myDatabase
- 指定认证信息与 URI:
mongorestore --uri=“mongodb://USER:PASS@localhost:27017/myDatabase” /path/to/backup/folder/myDatabase
- 仅恢复单个集合:
mongorestore --host localhost --port 27017 -d myDatabase -c myCollection /path/to/backup/folder/myDatabase/myCollection.bson
- 导入 JSON/CSV 数据(非 BSON 备份场景):
mongoimport -d myDatabase -c users --file /path/to/users.json
以上命令适用于 mongodump/mongorestore 的常规用法;路径中的数据库目录名应与实际备份结构一致。
三 时间点恢复与 Oplog 回放
- 前提条件:备份时包含 oplog(通常在 –oplog 选项下导出),且备份时间点之后到故障点的操作仍保留在 oplog.rs 中。
- 基本步骤:
- 先恢复最近一次全量备份(不含 oplog 回放);
- 使用 mongorestore --oplogReplay 回放 oplog 到目标库,将数据库恢复到更接近故障前的一致性状态:
mongorestore --host localhost --port 27017 --oplogReplay /path/to/backup/with_oplog
- 命名空间过滤(可选):
mongorestore --host localhost --port 27017 --oplogReplay --nsInclude ‘db.collection’ /path/to/backup/with_oplog
- 说明:时间点恢复依赖 oplog 的保留窗口 与备份时点,若 oplog 已被覆盖,则无法回放到故障时刻。
四 文件系统级恢复 WT 数据文件损坏或误删
- 适用场景:无可用逻辑备份,仅有 数据目录文件(如 WiredTiger 存储引擎的 WT 文件)且出现异常(如 mongod.lock/WiredTiger.lock 误拷导致异常、或关键元数据文件 _mdb_catalog.wt 丢失)。
- 安全做法:
- 先对磁盘做 只读镜像,所有操作在镜像上进行;
- 若仅为锁文件问题,可在确保 mongod 已停 的前提下移除异常锁文件再启动(不保证一定成功);
- 若 _mdb_catalog.wt 等关键元数据文件损坏或缺失,通常需要借助 WT 工具 从数据文件中提取记录,重建集合与索引,再导入到新实例。
- 风险提示:该过程复杂、易产生数据不一致,建议由 专业数据恢复 团队执行。
五 验证与常见问题处理
- 恢复后验证:
- 连接 shell:mongosh “mongodb://localhost:27017”
- 查看库表:show dbs;use myDatabase;show collections;
- 抽样校验:db.collection.find().limit(5);核对 文档数、索引、关键业务数据。
- 常见问题与要点:
- 认证失败:使用 –uri 或 –username/–password 提供具备相应权限的账户;
- 目标库非空:避免误覆盖,优先恢复到 新库 或使用 –drop(会清空同名集合);
- 路径结构:mongorestore 指向包含 数据库目录 的父目录,或显式指定 –db 与集合 .bson 文件路径;
- 版本兼容:尽量保持 备份与恢复的 MongoDB 主版本一致,跨大版本恢复需先在测试环境验证;
- 无备份场景:可尝试文件系统级恢复或联系专业服务,但成功率与一致性 无法保证。
- 运维建议:建立 定期全量 + 日常增量(oplog) 的备份策略,定期 恢复演练 验证可用性与完整性。