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

tun*_*nuz 14 ubuntu database mongodb

我在 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,但正如我所料,它不处理这些文件)。

谢谢

Ada*_*m C 19

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

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

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

您想要的选项是dbpath。你提到你的路径是/var/lib/mongo,所以你可以运行这样的东西:

mongodump --dbpath /var/lib/mongo -d <database name> -o /path/to/put/files
Run Code Online (Sandbox Code Playgroud)

或者,您也可以--repair在此处使用来修复损坏以及极端情况下的查询选项,以绕过损坏的部分(很少,如果需要的话)。mongodump页面上描述了各种选项:

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

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

  • Mongodump 3.0+ [不再有 --dbpath 标志](http://docs.mongodb.org/manual/reference/program/mongodump/#options)。 (5认同)
  • 请注意,如果您正在运行 Mongo 3.0 并且 `mongod --dbpath ./` 没有在 `.ns .0` 文件中为您提供数据库,则可能是存储引擎默认使用新的 WiredTiger 引擎旧的 MMapV1 引擎。尝试使用 `mongod --storageEngine mmapv1 --dbpath ./` 代替使用旧引擎进行连接。 (3认同)
  • 在 Mongo 3.0 中,一个选项是使用指定的文件启动 mongo 服务器:`mongod --dbpath ./` 然后在没有 `--dbpath` 的情况下继续执行 mongodump (2认同)