首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WriteConcern检测到mognodb中的一个错误

WriteConcern检测到mognodb中的一个错误
EN

Stack Overflow用户
提问于 2016-02-07 17:21:00
回答 1查看 3K关注 0票数 0

当我在monogdb中保存文档时,得到以下错误

代码语言:javascript
运行
复制
"{WriteConcern detected an error 'bad offset:0 accessing file:xxxx - consider
 repairing database'. (Response was { \"err\" : \"bad offset:0 accessing file:
  xxxxx - consider repairing database\", \"code\" : 13440, \"n\" : 0, 
 \"connectionId\" : 13, \"ok\" : 1.0 }).}"

有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-07 20:51:40

由于错误状态,数据库需要修复,因为它位于inconsistent state中,这是由于任何导致unexpected shutdown的操作造成的。

在MongoDB中,WriteConcern提供响应于写操作的反馈/确认。有多个级别的WriteConcerns或保证写操作是否成功。WriteConcerns级别如下:

  1. 未确认(客户端不等待确认写操作)
  2. 确认(客户端等待成功或异常攻击。(书面操作)
  3. 日志(mongodb只在提交写入日志后才发送确认)
  4. 副本确认。在复制集的主成员和/或其他成员上写入op )

您可以根据写操作的重要性将WriteConcerns的级别设置为任意级别。

在您的示例中,WriteConcern返回一个异常,说明数据库处于不一致的状态,数据可能/不可能已损坏。为了回到操作模式,您需要以多种方式修复数据库。

  1. 通过Mongodb (如果可以连接到MongoDb)
  2. 通过带有mongod的命令行查看下面

如果您可以进入MongoDB shell,那么您需要找到数据库并按如下所示进行修复

代码语言:javascript
运行
复制
use dbName
db.repairDatabase() //repairs the above database 

如果无法进入MongoDB shell或希望使用其他方法,则可以使用以下方法

修复数据文件并保留原始文件

代码语言:javascript
运行
复制
mongod --dbpath /data/db --repair --repairpath /data/db0
mongod --dbpath /data/db0

一旦上面的第一个命令完成,新修复的数据将位于/data/db0目录下,您可以使用第二个命令使用已修复的数据启动mongodb。原始数据文件保留在默认的/data/db或自定义位置(如果不是默认的话)。

修复数据文件而不保留原始文件

此方法只提供--repair而不提供--repathpath,它将尝试修复原始数据文件。首先必须删除mongod.lock文件,步骤如下:

代码语言:javascript
运行
复制
rm /data/db/mongod.lock

假设您的数据位于/ data /db目录中,如果没有指定位置的话。

-dbpath /data/db --修复

只使用--repair选项启动mongod,您不必传递--repairpath选项。这将尝试修复数据。然后最后启动数据库。

mongod dbpath /data/db

如果您遵循第一种修复方法,那么您可以在修复成功后删除mongod.lock。如果您遵循第二种方法,那么您可以在执行修复操作之前删除he mongod.lock

阅读文档如何安全关闭数据库,在mongod.lock中是什么?您应该如何进行修复(例如,使用同一个用户运行它以保留文件所有权)。数据文件的权限也可能已经更改,您可以将其chown返回,有关详细信息,请参阅此问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35256574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档