温馨提示×

MongoDB数据恢复在Ubuntu上如何操作

小樊
39
2025-12-20 16:45:35
栏目: 云计算

在 Ubuntu 上恢复 MongoDB 数据的实用步骤

一 标准恢复流程 mongorestore

  • 准备与校验
    • 确认备份为 mongodump 生成的目录(内含 .bson.metadata.json 文件),并确认目标 MongoDB 版本与备份时兼容。
    • 如在生产环境操作,建议先为现有数据做一次 mongodump 留底。
  • 停止写入(强烈建议)
    • 为避免恢复过程写入冲突,先停止应用或停止 mongod:sudo systemctl stop mongod。
  • 执行恢复
    • 全量恢复到指定库:sudo mongorestore --db yourDB /path/to/backup/yourDB
    • 全量恢复到所有库:sudo mongorestore /path/to/backup/
    • 覆盖写入更安全:sudo mongorestore --db yourDB --drop /path/to/backup/yourDB
    • 指定命名空间恢复:sudo mongorestore --nsInclude yourDB. /path/to/backup/yourDB*
    • 时间点恢复(需有 oplog):mongorestore --oplogReplay /path/to/oplog.bson
  • 启动与验证
    • 启动服务:sudo systemctl start mongod
    • 进入 shell 校验:mongosh,use yourDB;db.yourCollection.countDocuments() 或 find().limit(10)。
  • 常见提示
    • 使用 --db/–collection 指向 .bson 文件的用法已被弃用,优先使用 –nsInclude
      以上流程适用于 Ubuntu 20.04/22.04 等常见版本,命令语法与行为与官方工具一致。

二 无备份时的 WT 文件离线恢复

  • 适用场景
    • 仅有 WiredTiger 数据文件(如 collection-*.wt、_mdb_catalog.wt、WiredTiger.wt 等)且无法正常启动的情况。
  • 基本步骤
    • 准备目录并拷贝必要文件(至少包含目标 collection-*.wt_mdb_catalog.wt、WiredTiger.wt、sizeStorer.wt、storage.bson、WiredTiger 配置/锁文件*)。
    • 使用 WiredTiger 工具进行“打捞”:
      • 打捞:./wt -v -h /path/to/dump -C “extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]” -R salvage collection-xxx.wt
    • 导出为可导入格式:
      • 导出:./wt -v -h /path/to/dump -C “extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]” -R dump -f /path/collection.dump collection-xxx
    • 在临时 MongoDB 实例中创建同名空集合(触发 WT 文件生成),再用 WiredTiger 将 dump 导回:
      • 载入:./wt -v -h /var/lib/mongodb -C “extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]” -R load -f /path/collection.dump -r collection-xxx
    • 修复权限并重启:chown -R mongodb:mongodb /var/lib/mongodb;sudo systemctl start mongod
    • 为获得可用数据视图,建议对修复后的库再执行一次逻辑导出/导入:mongodump;mongorestore --drop
  • 重要提示
    • 该过程涉及底层文件操作,存在数据二次损坏风险;务必在只读副本离线环境操作,并先做完整拷贝。
    • 需要安装 WiredTiger 工具并匹配压缩库(如 snappy);不同 MongoDB 版本的 WT 格式可能不兼容。
      上述方法已在多例 WT 损坏/误删场景中验证可行,但仅建议由有经验的 DBA 执行。

三 逻辑备份恢复 mongoexport 与 mongoimport

  • 适用场景
    • 仅有 JSON/CSV 导出文件(由 mongoexport 生成),或需要跨平台/跨大版本迁移。
  • 恢复示例
    • JSON:mongoimport --db yourDB --collection yourColl --file /path/file.json --upsert
    • CSV:mongoimport --db yourDB --collection yourColl --type csv --file /path/file.csv --headerline
  • 注意
    • 逻辑导入不会保留 索引、存储引擎参数、部分 BSON 类型,适合数据迁移与轻量恢复;生产全量恢复优先使用 mongorestore
      该方式适合异构迁移与版本跨度较大的导入场景,工具可从 MongoDB 官方下载页面获取。

四 实用建议与常见问题

  • 权限与路径
    • 确保 /var/lib/mongodb 及备份目录对 mongodb 用户可读写:chown -R mongodb:mongodb /var/lib/mongodb;备份目录建议 700 权限。
  • 版本与兼容性
    • mongorestore 通常要求目标 MongoDB 版本 >= 备份版本;跨大版本恢复建议先小范围验证。
  • 时间点恢复
    • 需事先启用 oplog(通常为 副本集),并使用包含 oplog.bson 的备份:mongorestore --oplogReplay /path/to/oplog.bson
  • 一致性
    • 对线上库恢复前尽量停止写入或使用维护窗口;恢复后用 count、抽样 find、校验和等方式核对数据完整性。
      以上要点可显著降低恢复风险并提升成功率。

0