我有 3 个 Mongos 实例和 6 个 Mongod 实例。有 2 个自动分片分片,每个分片有 3 个副本集。
今天发现在我的系统上找不到一些数据,但是在 RockMongo 上可以找到。我试图在 mongos 上找到它,但什么也找不到。但是 count() 的结果告诉我数据还在。
mongos> db.video.find({ _id: ObjectId('51a0e7625c8e87cc6a000027') })
mongos> db.video.count({ _id: ObjectId('51a0e7625c8e87cc6a000027') })
1
mongos> db.runCommand({ count: "video", query: { _id: ObjectId('51a0e7625c8e87cc6a000027') } })
{ "shards" : { "s1" : 0, "s2" : 1 }, "n" : 1, "ok" : 1 }
我连接到 shard2 并找到了记录,但是很多字段都丢失了。同时,出现在 RockMongo 中的记录具有所有字段。
shard2:PRIMARY> db.video.find({ _id: ObjectId('51a0e7625c8e87cc6a000027') })
{ "_id" : ObjectId("51a0e7625c8e87cc6a000027"), "comment" : 78, "like" : 142, "scores" : { "total" : 37042292210.73388, "popular" : 72980.66026813157, "total_play" : 8737, "week_play" : 71 }, "views" : 8739 }
然后我发现 RockMongo 中显示的数据计数是 24w+,但是在 mongos 上运行 db.xx.count() 返回的结果是 23w+。在 Mongos 上丢失了一些数据!
我已尝试转储集合并还原到另一台服务器,一切正常。mongos和mongod之间肯定有什么关系,现在该怎么办?