mongodb中的错误:“getFile():错误的文件编号值(损坏的数据库?):运行修复”

在我上次Meteor升级后,我的数据库已损坏.首先,当我尝试创建一个新用户(我们使用的是meteor-accounts)时,它会以此错误消息开头:

getFile(): bad file number value (corrupt db?): run repair

然后我在另一个问题中看到我应该运行db.repairDatabase()但是,尽管mongo shell说数据库现在没问题,但它确实没有用.上面的错误消息仍然显示出来.

所以我读了一些有关已损坏索引的内容并删除了用户集合中的索引,这显然使一切变得更糟.现在我有两个用户使用相同的电子邮件地址,Meteor不再启动了:

MongoError: E11000 duplicate key error index: meteor.users.$emails.address_1  dup key: { : "thiago@gdeahj.com" }

当我尝试删除其中一个用户时,原始错误再次出现:

meteor:PRIMARY> db.users.remove({ _id: "cAtu2XsEXTbqL2Wvx"})
getFile(): bad file number value (corrupt db?): run repair`

幸运的是,我们仍处于开发阶段,我们可以放弃整个数据库并重新开始,但这让我对在生产环境中运行Meteor非常不安全.有没有办法在这种状态下修复数据库?

最佳答案 您可以运行
db.repairDatabase以尝试修复数据文件 – 但首先阅读链接页面以获取详细信息和警告.如果您之前没有使用日记功能,请确保运行日记功能,并且至少在生产时运行副本集.通常,在这种情况下,最好从另一个副本集成员重新同步或恢复备份而不是修复.您可以从MongoDB手册中找到有关
this article中数据恢复的更多信息.

点赞