我在 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,但正如我所料,它不处理这些文件)。
谢谢
.ns .0 .1
等文件本身就是数据文件。如果您启动一个mongod
带有指向该文件夹的参数的实例--dbpath
,或者如果您将内容移动到其他地方并使用选项指向那里,mongod 将尝试正常读取它们。由于您的问题表明损坏和/或其他一些问题开始
mongod
(您应该真正发布启动消息日志文件,也许在一个单独的问题中以解决该问题),那么还有其他选择。作为参考,最常见的问题与权限相关,尤其是当人们尝试手动(以他们自己的身份)或使用 sudo(以 root 身份)启动 mongod 并在各种目录中创建有问题的权限时。你是正确的,
mongorestore
不能直接使用这些数据文件,但mongodump
可以读取它们并将数据从它们转储到mongorestore
期望的 BSON 文件中。您在此处需要的选项是dbpath。你提到你的路径是
/var/lib/mongo
,所以你可以运行这样的东西:您也可以选择
--repair
在这里使用来修复损坏以及极端情况下的查询选项,以绕过损坏的部分(很少,如果有的话)。页面上描述了各种选项mongodump
:http://docs.mongodb.org/manual/reference/mongodump/
转储文件后,您可以使用
mongorestore
它们将它们重新导入到另一个mongod
实例中。