我们的+ - 400Gb数据库正在我们的服务器上停止。
来自日志:
2015-07-07T09:09:51.072+0200 I STORAGE [conn10] _getOpenFile() invalid file index requested 8388701
2015-07-07T09:09:51.072+0200 I - [conn10] Invariant failure false src/mongo/db/storage/mmap_v1/mmap_v1_extent_manager.cpp 201
2015-07-07T09:09:51.082+0200 I CONTROL [conn10]
我应该开始寻找什么?存储问题?
答案 0 :(得分:2)
我正在回答这个问题,以防有些人再次犯同样的非技术性错误:
我尝试将scp
目录中的所有文件/data/db
发送到服务器。由于文件很多(dbname.1
到dbname.55
,大约100GB),它在中间被中断(上一个成功的文件dbname.22
),我重新启动并上传dbname.23
到dbname.55
。当我在mongo
客户端中运行查询时,它适用于某些情况,并且对于其他一些显示错误消息的问题与查询中的错误信息相同。我以为它可能是文件传输中的某个文件损坏,但是md5检查没问题。只有在我花了很长时间完成所有md5检查后才找到原因。
结果是scp
上传dbname.21
后dbname.29
上传了dbname.2
,因此dbname.3
dbname.9
从未上传$("#modalConfirm").hide();
到服务器。我要上传它们,这应该可以解决问题。
答案 1 :(得分:1)
我今天遇到了这个变种。神秘地我的一个数据文件消失了(或者没有从另一个服务器迁移它)。没有任何修复/恢复过程可以工作,因为您引用的同一错误失败。幸运的是,我有一个单独的mongod,它有一个同名的集合,所以作为一个廉价的黑客,我把(不可否认的错误的)数据文件复制到另一台服务器,虽然我知道我不会得到任何数据,修复工具(例如mongod --repair
)然后能够发挥他们的魔力,但正如预期的那样,他们从我复制的坏文件中恢复了一些数据,因此我不得不清除一些文档。幸运的是它是“mycollection.1”文件,只有128MB。
我不认为这适用于您的情况,因为您的日志所讨论的丢失数据文件的索引非常高。您的日志实际上是说无法找到/data/dbname/mycollection.8388701
。你说你的数据集只有400GB,所以一个高的索引没有意义。您应该只有大约200个数据文件,因为默认情况下大多数都是2GB。 db.stats()
(特别是fileSize属性)的结果是什么?
这mongolab blog entry帮助我理解了数据文件结构。
我建议你应该从哪里开始寻找:
db.stats()
命令以了解您的数据有多大
盘实际上是。mongod --repair
或db.repairDatabase()
工具开始修复。我假设它不起作用,因为我的修复尝试因同一个invalid file index requested
错误而崩溃。希望这有助于指明你正确的方向。