Mongo shell没有显示数据库?

5
我有多个Mongo数据库,当我在我的CentOS Linux上执行ls -l命令时,我可以看到每个数据库的databaseA.0和databaseA.ns文件,文件大小足够大以告诉我数据仍然存在,但是当我通过执行mongo命令进入mongoDB shell并执行show dbsshow databases命令时,它只显示admin(空),local 0.078GB,和test(空)。
如何恢复我的数据库?
额外信息: 当我启动mongo shell时,我会得到以下提示:
MongoDB shell version: 2.6.4
connecting to: test
Server has startup warnings:
2014-08-15T23:23:14.300-0500 [initandlisten]
2014-08-15T23:23:14.300-0500 [initandlisten] ** WARNING: You are running in OpenVZ which can cause issues on versions of RHEL older than RHEL6.
2014-08-15T23:23:14.300-0500 [initandlisten]
2014-08-15T23:23:14.300-0500 [initandlisten] ** WARNING: /proc/sys/vm/zone_reclaim_mode is 1
2014-08-15T23:23:14.300-0500 [initandlisten] **          We suggest setting it to 0
2014-08-15T23:23:14.300-0500 [initandlisten] **          http://www.kernel.org/doc/Documentation/sysctl/vm.txt
2014-08-15T23:23:14.300-0500 [initandlisten]

检查你的数据库路径...尝试使用 mongod --dbpath /your/path - Darshan Patel
做了那个...还是不行。现在出现了一个mongod.lock文件。 - ConfusedDeer
我在服务器上,如果我从服务器内部访问它,端口是否重要? - ConfusedDeer
即使在服务器上,您也必须连接到Mongo shell。当您登录Mongo shell时,需要使用正确的端口/主机/数据库路径。 - displayName
我正在使用端口27017。当我执行“lsof -iTCP -sTCP:LISTEN | grep mongo”命令时,我使用“telnet localhost 27017”进行了测试,并且它显示已连接到本地主机,因此我认为连接成功。 - ConfusedDeer
显示剩余5条评论
2个回答

6

检查 dbpath

我会检查 MongoDB 使用的dbpath是否符合您的预期。

mongo shell 中运行以下命令:

 db.adminCommand("getCmdLineOpts")

如果有设置dbpath,它将在那里列出作为parsed.storage.dbPath(因为您正在使用MongoDB 2.6)。如果没有显式设置,则dbpath将默认为/data/db
如果使用配置文件,则还应在parsed.config中列出配置的路径。
要修复dbpath,您需要更新配置文件并重新启动mongod
设置dbpath时请注意,MongoDB 2.6支持两种配置文件格式,因此您需要匹配现有文件的格式。

YAML 配置文件使用分号作为分隔符,而传统格式则使用等号。


0
如果您的Mongo客户端已连接,请尝试db.repairDatabase()。欲了解更多信息请点击这里

使用--repairpath选项修复您的数据文件,以保留原始数据文件不被修改。

IMPORTANT:始终以相同的用户身份运行mongod,以避免更改MongoDB数据文件的权限。

使用--repair启动mongod来读取现有的数据文件。

mongod --dbpath /data/db --repair --repairpath /data/db0

当此过程完成后,新的修复数据文件将位于/data/db0目录中。 使用以下调用启动mongod,将dbPath指向/data/db0

mongod --dbpath /data/db0

一旦确认数据文件正常运行,您可以删除或归档 /data/db 目录下的旧数据文件。您也可以将修复后的文件移动到旧数据库位置或更新 dbPath 以指示新位置。


如果要修复数据文件而不保留原始文件,请勿使用--repairpath选项,如下所示:

删除陈旧的锁定文件:

rm /data/db/mongod.lock

/data/db替换为您的dbPath,其中包含MongoDB实例的数据文件。

警告:在删除mongod.lock文件后,您必须运行--repair进程,然后才能使用您的数据库。

使用--repair启动mongod以读取现有的数据文件。

mongod --dbpath /data/db --repair

当此过程完成后,修复后的数据文件将替换位于/data/db目录中的原始数据文件。

使用以下调用启动mongod,将dbPath指向/data/db

mongod --dbpath /data/db

来源: http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/


我完全按照您的指示操作,现在我有两个以我的数据库命名的新文件夹,但锁仍然存在。 - ConfusedDeer
我根据源链接更新了我的答案。也许这会对你有所帮助。 - Darshan Patel
我明天再试一次(我是指稍后) - ConfusedDeer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接