是否可以从 .ns 和 .0、.1、. ... 文件恢复 MongoDB 数据库?

是否可以从 .ns 和 .0、.1、. ... 文件恢复 MongoDB 数据库?

我在 Ubuntu 12.10 上安装了 MongoDB 2.0.4。最近我在从外部连接数据库时遇到了一些问题,并且发现有些东西阻止了 MongoDB 正确启动。根据多个来源(参见 StackOverflow)的建议,我删除/var/lib/mongodb/mongodb.lock并运行了mongod --repair。这并没有解决问题,MongoDB 无法运行并且不断创建锁定文件,之后它并没有处理删除这些文件。通过查看日志,我意识到它无权访问某个名为 的文件夹$tmpSomething,因此(因为名称暗示了一个临时文件夹)我将其删除,之后一切正常……除了我只能看到一个以前的数据库,而其他的数据库仍然存在,因为我的/var/lib/mongodb/文件夹中仍然充满了.ns .0 .1 .n很大的文件。有没有办法将它们恢复到数据库中?(我尝试过使用 mongorestore,但正如我所料,它无法处理那些文件)。

谢谢

答案1

etc.文件.ns .0 .1本身就是数据文件。如果您使用指向该文件夹的参数启动mongod实例--dbpath,或者将内容移动到其他位置并使用指向该位置的选项,mongod 将尝试正常读取它们。

由于您的问题表明存在损坏和/或其他问题mongod(您确实应该发布启动消息日志文件,也许在单独的问题中解决该问题),那么还有其他选择。作为参考,最常见的问题与权限有关,尤其是当人们尝试手动(以他们自己的身份)或使用 sudo(以 root 身份)启动 mongod 并在各个目录中创建有问题的权限时。

您说得对,mongorestore不能直接使用这些数据文件,但mongodump可以读取它们并将数据转储到mongorestore所需的 BSON 文件中。

您想要的选项是数据库路径。您提到您的路径是/var/lib/mongo,因此您可以运行如下命令:

mongodump --dbpath /var/lib/mongo -d <database name> -o /path/to/put/files

您也可以选择在此处使用--repair查询选项来修复损坏,以在极端情况下绕过损坏的部分(很少需要)。页面上描述了各种选项mongodump

http://docs.mongodb.org/manual/reference/mongodump/

一旦您转储出文件,您就可以mongorestore将它们重新导入到另一个mongod实例中。

相关内容