当它存在于分片上时,无法在Mongos上找到一些数据

时间:2013-08-25 04:07:29

标签: mongodb

我有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之间必定有一些东西,我现在该怎么办?

1 个答案:

答案 0 :(得分:0)

最后,我发现shard2的主要部分丢失了一些数据,但是shard2的副本集保留了完整的数据。我关闭primary并创建一个新的副本集。一切都很好。