是否有可能从.ns和.0,.1,…恢复MongoDB数据库。 …文件?

我在Ubuntu 12.10上安装了MongoDB 2.0.4。 最近我从外面连接到数据库时遇到了一些问题,并且发现有些东西阻止了MongoDB的正确启动。 正如在几个来源(见StackOverflow)build议我删除/var/lib/mongodb/mongodb.lock并运行mongod --repair 。 这并没有解决问题,MongoDB不会运行,并保持创buildlocking文件,事后不去处理。 通过查看日志,我意识到,它不能访问一些名为$tmpSomething文件夹,所以(因为名称build议临时文件夹),我把它删除,然后这一切工作…除了我只有一个我以前的数据库在望,而其他的仍然在那里,因为我的/var/lib/mongodb/文件夹仍然充满.ns .0 .1 .n文件重量很多。 有没有办法将它们还原到数据库中? (我曾经用mongorestore试过,但是正如我期待的那样,它并不处理这些文件)。

谢谢

.ns .0 .1等文件本身就是数据文件。 如果你启动了一个带有--dbpath参数指向该文件夹的mongod实例,或者如果你把内容移动到别的地方,并使用这个选项指向那个地方,mongod会试图正常读取它们。

既然你的问题提出了启动mongod问题(你应该真的发布启动消息日志文件,也许在一个单独的问题来解决这个问题),然后有其他的select。 作为参考,最常见的问题是与权限相关的问题,特别是当用户尝试手动启动mongod(作为自己)或sudo(作为root)并在各个目录中创build有问题的权限时。

mongorestore无法直接使用这些数据文件是正确的,但是mongodump可以读取它们并将数据转储到mongorestore期望的BSON文件中。

你想要的选项是dbpath 。 你提到你的path是/var/lib/mongo ,所以你可以像这样运行:

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

或者,您也可以在这里使用--repair修复腐败以及极端情况下的查询选项,以避免损坏的部分(很less,如果需要的话)。 在mongodump页面上描述了各种选项:

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

将文件转储出来后,可以使用mongorestore将其重新导入到另一个mongod实例中。