我们正在使用mongodb 3.0.2,我们的系统是通过彩信管理的
我们发现我们的新DEV环境之一丢失了/data/db
的所有内容,包括日志,日志和配置文件。
有一件事是实例仍然在内存中运行。
有没有人有解决方法如何从这种情况中恢复?
我尝试了一个db.fsyncLock()
,它应该将数据刷新到磁盘中,但没有运气。
答案 0 :(得分:2)
AFAICT,因为文件已经被MongoDB打开/记忆,removing their entry from the filesystem不会阻止MongoDB仍然使用它们(至少在类Unix系统上)。只要它们没有关闭并且MongoDB不需要打开其他文件,事情应该仍然可用。足够开始做一些转储。
作为实验,我使用2M文档填充了新安装的MongoDB 3.0.2实例。在访问集合之前,先停止它,重新启动它,然后删除data
文件夹。最后,我能够mongodump
没有任何问题地收集该集合:
> for (i = 0; i < 2000000; ++i) { db.test.insert({x:i}) }
# Stop MongoDB
# Start MongoDB again
rm -rf data
mongodump -d test -c test
# success !
# Stop MongoDB
mkdir -p data/db
# Start MongoDB again
mongorestore -d test -c test dump/test/test.bson
> db.test.count()
2000000