温馨提示×

mongodb数据恢复centos上怎么做

小樊
36
2025-12-17 11:19:06
栏目: 云计算

CentOS 上 MongoDB 数据恢复实操指南

一、恢复方式总览

  • 使用官方工具恢复:通过 mongorestore 恢复由 mongodump 生成的 BSON 数据,适合常规全量或按库/集合恢复。若备份包含 oplog,可结合 –oplogReplay 实现时间点恢复(推荐在临时实例中回放,确认无误后再导入生产)。
  • 文件系统级恢复:当数据目录损坏或误删且具备 WiredTiger 底层文件(如 .wt)时,可用 wt 工具导出/导入或修复,作为“最后手段”。
  • 复制集回滚:若为 副本集,可直接从其他成员重新同步或回滚到安全时间点。
  • 工具版本匹配:恢复工具(mongodump/mongorestore)与目标 MongoDB 版本尽量一致,避免 BSON/特性不兼容。

二、标准流程 mongorestore 恢复(含时间点恢复)

  • 准备环境
    • 安装数据库工具(若未安装):sudo yum install -y mongodb-org-tools
    • 建议先备份当前数据目录:sudo cp -R /var/lib/mongo /var/lib/mongo_backup
    • 如涉及认证,准备具有相应权限的账号与 –authenticationDatabase
  • 全量恢复(示例)
    • mongorestore --host 127.0.0.1 --port 27017 -u root -p ‘pwd’ --authenticationDatabase admin /path/to/dump/
  • 时间点恢复(推荐在临时实例操作)
    1. 先做含 oplog 的基础备份:mongodump -u root -p ‘pwd’ --authenticationDatabase admin --oplog -o /tmp/bak
    2. 确定恢复窗口:
      • 基础备份时间:stat /tmp/bak/oplog.bson 获取备份完成时刻的时间戳(秒级)。
      • 误操作时刻:在源库查询 oplog,例如 db.getCollection(‘oplog.rs’).find({op:“c”, ns:“yourdb.$cmd”, o:{drop:“yourcoll”}}),记录 ts
    3. 导出增量 oplog 片段:
      • mongodump -u root -p ‘pwd’ --authenticationDatabase admin -d local -c oplog.rs -q ‘{ts:{$lt:Timestamp(TS2,1),$gt:Timestamp(TS1,1)}}’ -o /tmp/zl
    4. 启动临时实例(端口如 27018):mongod --dbpath /root/mtmp --logpath /root/mtmp/27018.log --port 27018 --bind_ip_all
    5. 先恢复基础备份并回放 oplog:mongorestore --port 27018 --oplogReplay /tmp/bak
    6. 再回放增量 oplog:mongorestore --port 27018 --oplogReplay /tmp/zl/local/oplog.rs.bson
    7. 校验数据后,再按需要导出/导入到生产库。
  • 说明
    • oplog 回放具备幂等性,重复执行不会产生副作用。
    • 若仅需恢复单库/单集合:mongorestore --db dbname --collection coll /path/to/dump/dbname/coll.bson

三、文件系统级恢复 WT 工具(WiredTiger 底层)

  • 适用场景:数据目录损坏、误删集合但 WiredTiger 文件仍在,或需要从 .wt 直接抽取数据。
  • 基本步骤
    1. 安装依赖并编译 wt(示例为 CentOS 7):
      • sudo yum install -y epel-release libtool automake snappy snappy-devel lz4 lz4-devel zstd zstd-devel zlib zlib-devel git make
      • git clone https://github.com/wiredtiger/wiredtiger.git
      • git checkout tags/mongodb-4.4.1 -b v4.4.1
      • sh autogen.sh && ./configure --disable-shared --with-builtins=lz4,snappy,zlib,zstd && make -j $(nproc) && make install
    2. 仅导出集合数据(已知表与文件映射):
      • …/wt -C “extensions=[libwiredtiger_snappy.so]” -R dump _mdb_catalog > table.list
      • 依据 table.list 找到目标集合对应的 collection-*.wt,导出:
        • …/wt -v -C “extensions=[libwiredtiger_snappy.so]” -R dump collection-xxx.wt
    3. 在临时实例中恢复
      • 启动临时 mongod(dbpath 指向新目录),在 mongo shell 中先创建同名空集合以获取目标 collection-*.wt 文件;停掉 mongod。
      • 用导出的数据覆盖该 collection-*.wt,执行修复:…/wt salvage file:collection-xxx.wt
      • 重启 mongod,校验数据;如需回到正式库,可 mongodump 导出后再 mongorestore 到生产。
  • 提示:若压缩算法为 snappy/zstd,需在 wt 命令中通过 -C “extensions=[…]” 正确加载对应库。

四、注意事项与常见问题

  • 版本兼容:备份与恢复工具版本尽量与目标 MongoDB 一致;跨大版本恢复需先在测试环境验证。
  • 权限与安全:确保用于恢复的账号具备 readWrite/restore 等必要权限;生产恢复前先在临时实例验证。
  • 避免覆盖:恢复前备份现有 /var/lib/mongo;尽量恢复到新目录/临时实例,确认无误再切换。
  • 锁定与并发:文件系统级恢复时,确保 mongod 已停止,避免 WiredTiger.lock: Resource temporarily unavailable
  • 时间点恢复窗口:精确确定 基础备份完成时刻误操作时刻oplog ts,避免漏回放或误回放。
  • 校验:恢复后用 show dbs/集合统计/抽样查询核对数据一致性与数量。

0