1

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

不小心我从集合中删除了所有数据,但在数据库文件(使用 vim 的资源管理器)中,它是所有(或部分)数据。

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

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

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

有什么建议吗??谢谢!!!

4

1 回答 1

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% 的丢失信息。

警告:

  • 这不是解决此问题的简单且安全的方法。在我的情况下,数据库只接收信息,而不是修改或更新它。
  • 使用这种方法,会丢失很多信息,Mongo IDs,整数,日期,无法恢复。
  • 该过程是 100% 手动进行的,您可以将时间花在自动化某些任务上,但这取决于您的数据库结构。
于 2014-01-21T09:41:40.073 回答