You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从超5000万文档的全量备份中恢复误删的两个数据库集合?

恢复MongoDB中被删除的指定集合(全量备份场景)

首先,因为你已经关闭了journal archiving,没法通过oplog做增量回滚,所以只能从全量备份里提取需要的集合。下面是具体操作步骤,全程建议先在非生产环境测试一遍,避免影响线上数据:

步骤1:搭建临时MongoDB实例

为了不干扰生产库,先启动一个临时MongoDB服务专门用来恢复全量备份:

  • 创建临时数据目录:
    mkdir -p /tmp/mongo_temp_data
    
  • 启动临时实例(端口和生产库区分开,比如用27018):
    mongod --port 27018 --dbpath /tmp/mongo_temp_data --bind_ip 127.0.0.1
    

步骤2:从全量备份恢复到临时实例

假设你的全量备份是mongodump生成的,备份目录为/path/to/full_backup,用mongorestore恢复到临时实例:

mongorestore --port 27018 /path/to/full_backup

如果备份是压缩格式(备份时用了--gzip),记得加上对应参数:

mongorestore --port 27018 --gzip /path/to/full_backup

步骤3:导出需要恢复的两个集合

用mongodump单独导出目标集合(相比mongoexport,能更好保留BSON数据类型,更可靠):
假设数据库名为your_db,被删集合是collection1和collection2:

mongodump --port 27018 --db your_db --collection collection1 --out /tmp/target_collections
mongodump --port 27018 --db your_db --collection collection2 --out /tmp/target_collections

步骤4:将导出的集合导入生产数据库

现在把备份的集合导入生产库(默认端口27017):

mongorestore --port 27017 --db your_db /tmp/target_collections/your_db/collection1.bson
mongorestore --port 27017 --db your_db /tmp/target_collections/your_db/collection2.bson

注意:如果生产库中已存在同名集合(比如误删后又重建),需要先删除该集合,或者在命令后加--drop参数(会覆盖现有数据,务必谨慎操作)

步骤5:清理临时资源

完成恢复后,清理临时实例和文件:

  • 关闭临时MongoDB服务:
    mongo --port 27018 --eval "db.adminCommand({ shutdown: 1 })"
    
  • 删除临时目录:
    rm -rf /tmp/mongo_temp_data /tmp/target_collections
    

额外提醒

  • 恢复完成后,一定要验证数据完整性:比如查询集合计数、随机抽查几条关键数据。
  • 后续建议开启journal archiving,同时定期做增量备份,下次遇到类似问题可以用oplog快速回滚,无需全量恢复。

内容的提问来源于stack exchange,提问作者thichxai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:53:47