【问题标题】:MongoDB data corruption on a replica set副本集上的 MongoDB 数据损坏
【发布时间】:2021-10-21 12:52:36
【问题描述】:

我正在使用在副本集中运行的 MongoDB 数据库。

不幸的是,我注意到数据似乎已损坏。

数据库中应该有超过 10,000 个文档。但是,查询中没有返回数千条记录。

总计数确实显示了正确的总数。

db.records.find().count()
10793

并且通过RecordID(自定义序列整数)查询时会返回一些记录。

db.records.find({"RecordID": 10049})
{ "_id" : ObjectId("5dfbdb35c1c2a400104edece")

但是,当查询我知道事实应该存在的记录时,它不会返回任何内容。

db.records.find({"RecordID": 10048})
db.records.find({"RecordID": 10047})
db.records.find({"RecordID": 10046})

这个问题似乎非常零星,在某些情况下,整个记录范围都丢失了。从 RecordID 1500 到 8000 的整个范围都丢失了。

问题:问题的原因可能是什么?我可以做些什么来进一步解决此问题并恢复损坏的数据?我查看了运行 repairDatabase 但这仅适用于独立实例。

更新:

关于复制的更多信息:

rs.printReplicationInfo()
configured oplog size:   5100.880859375MB
log length start to end: 14641107secs (4066.97hrs)
oplog first event time:  Wed Mar 03 2021 05:21:25 GMT-0500 (EST)
oplog last event time:   Thu Aug 19 2021 17:19:52 GMT-0400 (EDT)
now:                     Thu Aug 19 2021 17:20:01 GMT-0400 (EDT)

rs.printSecondaryReplicationInfo()
source: node2-examplehost.com:27017
        syncedTo: Thu Aug 19 2021 17:16:42 GMT-0400 (EDT)
        0 secs (0 hrs) behind the primary
source: node3-examplehost.com:27017
        syncedTo: Thu Aug 19 2021 17:16:42 GMT-0400 (EDT)
        0 secs (0 hrs) behind the primary

更新 2: 我们从备份中进行了恢复,但它似乎解决了这个问题。

【问题讨论】:

  • 来自count() 文档:如果 find() 操作在没有查询谓词的情况下运行,则避免使用 count(),因为没有查询谓词,这些 count() 基于集合的元数据,这可能会导致近似计数。
  • 什么是副本集状态(rs.statusrs.printReplicationInfo())你连接到 PRIMARY 还是 SECONDARY?你的阅读偏好是什么?
  • 复制集的修复通常是:停止辅助 mongod - 删除 dbPath 文件夹中的所有文件 - 再次启动 mongod 进程。启动后它将执行inital sync
  • 谢谢!在这种情况下,无论有没有 find 的 count() 都返回相同的结果。 db.records.find().count() 10793 db.records.count() 10793 现在查看其他问题的答案。再次感谢
  • 你能显示这个查询的结果是什么吗:db.records.find({}).sort({"RecordID": -1}).limit(1)。 - 至少显示字段“RecordID”的值是什么 - 不需要整个文档。

标签: mongodb corruption recovery replicaset


【解决方案1】:

我们从备份中进行了恢复,但它似乎解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多