![是否可以从 .ns 和 .0、.1、. ... 文件恢复 MongoDB 数据库?](https://linux22.com/image/598739/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BB%8E%20.ns%20%E5%92%8C%20.0%E3%80%81.1%E3%80%81.%20...%20%E6%96%87%E4%BB%B6%E6%81%A2%E5%A4%8D%20MongoDB%20%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%9F.png)
我在 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
实例中。