我在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
实例中。