我有各种Mongo数据库,当我在CentOS linux中ls -l
时,我可以看到每个数据库的databaseA.0和databaseA.ns文件,文件大小足以告诉我的数据仍在那里,但是当我通过执行mongo
命令转到mongoDB shell并执行show dbs
或show databases
时,它只显示admin(空),本地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]
答案 0 :(得分:3)
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 configuration - 在2.6中添加:
storage:
dbPath: /var/lib/mongo
Legacy INI-style config format - 在2.6中仍然受支持,如果您从较旧版本的MongoDB升级可能的格式
dbpath = /var/lib/mongo
YAML配置使用分号表示分隔符,而旧格式使用等号。
答案 1 :(得分:0)
如果您的mongo客户端已连接,请尝试db.repairDatabase()
。有关详细信息click here
使用--repairpath
选项修复数据文件,以保留未修改的原始数据文件。
IMPORTANT
:始终将mongod
作为same user
运行,以避免更改MongoDB数据文件的权限。
使用mongod
启动--repair
以读取现有数据文件。
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
替换为您的MongoDB实例数据文件所在的dbPath
。
WARNING
:删除mongod.lock
文件后,必须先运行--repair
进程才能使用数据库。
使用mongod
启动--repair
以读取现有数据文件。
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/