首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mongodb中删除集合的手动恢复

mongodb中删除集合的手动恢复
EN

Database Administration用户
提问于 2017-10-27 10:00:11
回答 3查看 11.2K关注 0票数 1

一些收藏被意外地从mongodb中删除。虽然集合不存在,但在dbpath中有6GB的dbname.0、dbname.1、.和dbname.ns

我们试图运行单修复程序,但没有恢复文件,而是删除了它们。

有办法恢复这些数据吗?可能是部分的?

我们使用的是独立的mongodb。

谢谢

EN

回答 3

Database Administration用户

发布于 2017-10-29 02:05:08

我们试图运行单修复程序,但没有恢复文件,而是删除了它们。

修复和备份过程(按设计)将忽略已删除的数据。根据问题中引用的文件名,您正在使用MMAP存储引擎。当MMAP中的记录被删除时,记录的前几个字节被覆盖,预先分配的存储空间被标记为可用,以便在空闲列表上重新使用。有可能您可以编写一个自定义脚本来尝试从已删除的记录中恢复有用的字节,但是没有支持的“撤消”过程。

希望您在运行--repair之前备份您的数据文件。修复MMAP数据文件将导致您的数据文件的竞争重建,并将释放已删除的集合和文档所使用的预先分配的空间。在试图从独立的MongoDB部署中恢复或修复数据库文件的任何情况下,建议首先停止MongoDB实例并对数据文件进行文件副本备份。

有办法恢复这些数据吗?可能是部分的?

最好的选择是从最近的MongoDB备份中恢复。

在没有备份的单独MMAP部署中,唯一的其他可能是编写自定义数据恢复脚本,试图识别和挽救已删除的文档。这需要一些重要的猜测和手工操作来清理数据。删除的记录将丢失一些基本信息,例如关联的BSON文档的大小,并且可能会根据数据的来源而改变内部存储(例如,如果所有数据都是在特定版本的MongoDB中创建的,而不是通过连续的主要版本升级的数据文件)。

有关一些可能的方法,请参见StackOverflow:有办法恢复已删除的文档吗?

票数 2
EN

Database Administration用户

发布于 2017-10-28 06:53:33

也许,因为您使用的是MMAPv1,而且您可以使用--dbPath参数直接连接到这些文件。将数据转储到文件中,然后将其导入当前数据库。

这是理论上的。

您是否再次尝试创建该DB,然后复制这些文件(除了.ns,只是)。而不是新的?

票数 0
EN

Database Administration用户

发布于 2019-08-06 11:54:15

使用来自延迟节点的mongoimport恢复删除的数据库

然后通过保持独立,回滚主服务器上的所有操作,

在应用程序级别24小时后,通过锁定数据库并生成操作失败,中止发生在同时回滚中的所有操作。

在成功回滚之后,您可以开始复制,在主服务器上,

然而,性能损失为24小时。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/189483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档