从mongo数据库文件导出到bson

时间:2014-01-13 14:35:08

标签: mongodb recover

我有一个mongo数据库db.ns,db.0,db.1,... db.7

无意中我从集合中删除了所有数据,但是在数据库文件(带有vim的资源管理器)中,它是数据的全部(或部分)。

尝试恢复移动到另一个mongodb实例或mongod --restore的数据后,我尝试使用mongodump,但该集合显示为空。

我尝试直接从文件中从头开始恢复。我尝试使用每个bsondump,以及单个文件(cat db.ns db.1 ...> bigDB),但没有。

我不知道从mongo数据库文件中恢复数据的其他方法。

有什么建议吗? THX !!!

1 个答案:

答案 0 :(得分:0)

[解决]

我会尝试解释我做什么来“解决”这个问题。

<强>首先。理论

在这个SlideShare中,可以看到一些MongoDB数据库文件的工作原理。 http://www.slideshare.net/mdirolf/inside-mongodb-the-internals-of-an-opensource-database

选项:

当您意外删除集合时:

  • 您要做的第一件事就是快速复制所有数据库(通常在/ data / db或/ var / lib / mongodb中)并停止服务。 删除日志目录尝试从此副本中恢复并祈祷; D

你可以在这里看到更多相关信息: mongodb recovery removed records

就我而言,这对我不起作用。

  • 在Journaly案例中, mongo不直接更新其数据库文件仅限其索引。 这样,您就可以访问这些文件(指定为database.ns,database.0,database.1 ...)并尝试恢复它。

这些文件是切割的BSON和二进制文件。因此,您可以打开并查看所有信息

就我而言,我在PHP中创建了一个简单的函数,它首先读取文件,并在较小的文件中爆炸文件。

之前,采取一对一并应用一些常规表达式来删除十六进制值,将信息分解到寄存器中(您可以看到“_id”键来执行此操作)并执行其他任务来清除信息。

最后,我必须手动处理所有预处理信息以获取所有信息。

我想,我至少丢失了15-25%的信息。但我更愿意认为我已经收回了75%的丢失信息。

注意:

  • 这不是解决此问题的简单而安全的方法。在我的例子中,db只接收信息,而不是修改或更新它。
  • 使用此方法,将丢失大量信息,无法恢复Mongo ID,整数,日期。
  • 过程100%手动完成,您可以将时间花在自动执行某些任务上,但这取决于您的数据库结构。