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


14

我在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,但正如我所期望的那样,它不处理那些文件)。

谢谢

Answers:


19

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

由于您的问题表明损坏和/或其他一些问题开始出现mongod(您应该真正将启动消息日志文件发布,也许在一个单独的问题中以解决该问题),所以有其他选择。作为参考,最常见的问题是与权限相关的,特别是当人们尝试手动(以其本身)或以sudo(以root身份)启动mongod并在各个目录中创建有问题的权限时。

您是正确的,他们mongorestore不能直接使用这些数据文件,但mongodump可以读取它们并将数据从它们转储到所需的BSON文件中mongorestore

您想要的选项是dbpath。您提到的路径是/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实例中。



2
使用Mongo 3.0时,一个选项是使用指定的文件启动mongo服务器:mongod --dbpath ./然后继续进行不带--dbpath
shwaydogg

3
请注意,如果您正在运行Mongo 3.0,mongod --dbpath ./但未在.ns .0文件中提供数据库,则可能是存储引擎默认使用新的WiredTiger引擎而不是旧的MMapV1引擎。尝试mongod --storageEngine mmapv1 --dbpath ./使用旧引擎进行连接。
Flamebaud '16

1
谁能帮助我将数据从.ns,.0和.1文件迁移到mongo 3.0
Mandeep Singh

1
正如@flamebaud所说,默认引擎已更改。请检查Mongo文档中的Default Storage Engine Change。您可能还想看看WiredTiger Storage Engine
Ludovic Kuty
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.