温馨提示×

Linux下MongoDB数据恢复技巧

小樊
41
2025-11-22 21:01:43
栏目: 云计算

Linux下MongoDB数据恢复技巧

一、恢复前的准备与通用流程

  • 明确恢复目标与范围:是整库、单库/单集合,还是按时间点回滚;确认当前实例的MongoDB大版本存储引擎(如WiredTiger/RocksDB)、是否启用TDE、以及dbPath位置。
  • 立即“止损”:尽量将业务切到只读或暂停写入,避免覆盖可恢复的数据。
  • 做好当前环境快照:对现有数据目录与配置文件做一次完整拷贝备份,便于回滚。
  • 选择匹配的恢复路径:有逻辑备份(mongodump)优先用 mongorestore;有物理备份(文件系统/云盘快照)走物理恢复;是副本集可用节点重建/回放 oplog;有云备份可按时间点或库表恢复至新实例再迁移。
  • 版本与工具兼容:恢复工具的版本需与目标实例版本匹配,避免不兼容导致导入失败或数据不一致。

二、常用恢复方法与命令

  • 逻辑备份恢复(mongorestore)
    1. 停止写入并备份当前数据目录;2) 使用 mongorestore 导入:
    • 全量恢复:mongorestore --host --port <backup_dir>
    • 指定库/集合:mongorestore --host --port --db --collection <file.bson>
    1. 校验集合计数、索引与样本数据。
  • 数据目录文件级恢复
    1. 停止 mongod;2) 备份当前 dbPath;3) 将备份的 数据文件覆盖到 dbPath(保持文件权限/属主一致);4) 启动 mongod 并校验。
  • 复制集恢复
    • 节点故障:从健康节点重新同步或重建该节点;
    • 误删集合/库:在主节点停止应用写入,使用oplog回放到故障前的时间点(需有 oplog.rs 的访问权限与合适的 oplog 窗口)。
  • 物理备份恢复(文件系统快照/云盘快照/Percona XtraBackup)
    1. 准备与目标实例版本一致的 MongoDB(WiredTiger/RocksDB 需对应);2) 停止 mongod;3) 将快照内容解压/拷贝到 dbPath;4) 使用正确配置启动(WiredTiger 常用配置含:storage.dbPath、systemLog、net、processManagement、security.authorization 等);5) 登录验证。
  • 云数据库 MongoDB 备份恢复
    • 可恢复到新实例,支持按时间点库/集合跨地域等;若需回到原实例,可先恢复到新实例,再通过DTS迁移或切换连接地址。

三、场景化恢复路径建议

场景 首选方法 关键要点
有 mongodump 全量/增量备份 mongorestore 版本匹配;必要时按库/集合导入;导入后校验索引与数据量
有文件系统/云盘快照 物理恢复 版本与存储引擎一致;WiredTiger/RocksDB 配置正确;启动后验证
副本集节点损坏或数据落后 复制集重同步/重建 优先从健康节点全量同步;必要时用 oplog 回放到指定时间点
误删集合/少量文档 时间点恢复/库表恢复 云盘版副本集支持按时间点或库表恢复;自建库可用 oplog 回放
需要跨地域容灾 跨地域恢复 在目标地域新建实例并恢复备份,满足监管/容灾需求

四、关键注意事项与常见坑

  • 版本强一致:备份/恢复工具与目标实例的大版本需一致;旧版 mongorestore 可能无法兼容新版 MongoDB。
  • 存储引擎与特性:物理恢复需匹配WiredTiger/RocksDB;若启用TDE或使用了TerarkDB等特殊引擎,需采用对应的恢复方案。
  • 权限与认证:恢复后若启用认证,确保创建管理员/业务账号并校验登录与授权。
  • 数据一致性校验:恢复完成后核对集合文档数索引大小与关键业务查询,必要时抽样比对。
  • 回放 oplog 的前提:需具备对local.oplog.rs的访问能力,且 oplog 窗口覆盖故障发生时间;回放前务必停止写入

五、快速命令清单

  • 停止/启动服务
    • 停止:sudo systemctl stop mongod
    • 启动:sudo systemctl start mongod(或 mongod -f /path/mongod.conf)
  • 逻辑恢复
    • 全量:mongorestore --host 127.0.0.1 --port 27017 /path/backup
    • 指定库/集合:mongorestore --host 127.0.0.1 --port 27017 --db test --collection users /path/users.bson
  • 物理恢复(示例配置要点)
    • WiredTiger 单节点最小配置:
      storage.dbPath: /test/mongo/data
      systemLog.path: /test/mongo/mongod.log
      net.port: 27017
      security.authorization: enabled
      processManagement.fork: true
  • 登录验证
    • mongo --host 127.0.0.1 -u -p --authenticationDatabase admin

0