一些收藏被意外地从mongodb中删除。虽然集合不存在,但在dbpath中有6GB的dbname.0、dbname.1、.和dbname.ns
我们试图运行单修复程序,但没有恢复文件,而是删除了它们。
有办法恢复这些数据吗?可能是部分的?
我们使用的是独立的mongodb。
谢谢
发布于 2017-10-29 02:05:08
我们试图运行单修复程序,但没有恢复文件,而是删除了它们。
修复和备份过程(按设计)将忽略已删除的数据。根据问题中引用的文件名,您正在使用MMAP存储引擎。当MMAP中的记录被删除时,记录的前几个字节被覆盖,预先分配的存储空间被标记为可用,以便在空闲列表上重新使用。有可能您可以编写一个自定义脚本来尝试从已删除的记录中恢复有用的字节,但是没有支持的“撤消”过程。
希望您在运行--repair
之前备份您的数据文件。修复MMAP数据文件将导致您的数据文件的竞争重建,并将释放已删除的集合和文档所使用的预先分配的空间。在试图从独立的MongoDB部署中恢复或修复数据库文件的任何情况下,建议首先停止MongoDB实例并对数据文件进行文件副本备份。
有办法恢复这些数据吗?可能是部分的?
最好的选择是从最近的MongoDB备份中恢复。
在没有备份的单独MMAP部署中,唯一的其他可能是编写自定义数据恢复脚本,试图识别和挽救已删除的文档。这需要一些重要的猜测和手工操作来清理数据。删除的记录将丢失一些基本信息,例如关联的BSON文档的大小,并且可能会根据数据的来源而改变内部存储(例如,如果所有数据都是在特定版本的MongoDB中创建的,而不是通过连续的主要版本升级的数据文件)。
有关一些可能的方法,请参见StackOverflow:有办法恢复已删除的文档吗?。
发布于 2017-10-28 06:53:33
也许,因为您使用的是MMAPv1,而且您可以使用--dbPath参数直接连接到这些文件。将数据转储到文件中,然后将其导入当前数据库。
这是理论上的。
您是否再次尝试创建该DB,然后复制这些文件(除了.ns,只是)。而不是新的?
发布于 2019-08-06 11:54:15
使用来自延迟节点的mongoimport恢复删除的数据库
然后通过保持独立,回滚主服务器上的所有操作,
在应用程序级别24小时后,通过锁定数据库并生成操作失败,中止发生在同时回滚中的所有操作。
在成功回滚之后,您可以开始复制,在主服务器上,
然而,性能损失为24小时。
https://dba.stackexchange.com/questions/189483
复制相似问题