4

我已经针对大小为 600GB 的数据库在 3 个分片集群上执行了“mongodump”,并且块平均分布在所有 3 个分片上。

我的 mongodump 命令是这样的:

mongodump --db mydb123 --authenticationDatabase admin --journal -u root -p password123 -o mydb123

块几乎均匀地分布在所有 3 个分片中。++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++

然后我将转储文件移动到一个新集群并在新的 2-shard 集群上执行此转储文件的“mongorestore”。这个数据库的大小现在只有 80 GB。我想这是意料之中的(紧凑的行动)。但这是我的问题:在新的 2-shard 集群上,执行命令“sh.status()”没有显示该数据库的任何 CHUNKS。我的 mongorestore 命令是这样的:

mongorestore -u root -p newpass123 --authenticationDatabase admin --verbose /data/db/backups/new_dir/mydumpfile

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SH.STATUS() 的实际输出如下所示:

mongos> sh.status() --- 分片状态 --- 分片版本:{ "_id" : 1, "version" : 3, "minCompatibleVersion" : 3, "currentVersion" : 4, "clusterId" : ObjectId(" 52efaaa0a83668acafc3bcb0") } 分片:{“_id”:“sh1”,“主机”:“sh1/hfdvmprmongodb1:27000,hfdvmprmongodb2:27000”} {“_id”:“sh2”,“主机”:“sh2/hfdvmprmongodb1:27001 ,hfdvmprmongodb2:27001" } 数据库:{“_id”:“admin”,“partitioned”:false,“primary”:“config”} {“_id”:“test”,“partitioned”:false,“primary”: “sh1”}{“_id”:“定价”,“分区”:true,“primary”:“sh2”} {“_id”:“mokshapoc”,“分区”:true,“primary”:“sh1”}

mongos> isBalancerRunning() Tue Feb 4 11:09:39.242 ReferenceError: isBalancerRunning is not defined mongos> sh.isBalancerRunning() true

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 所以,我已经完全完成了 mongorestore 并且没有显示 80 GB 数据库的 CHUNKS(在执行 mongodump 时曾经是 600 GB 数据库)

我对没有看到任何块的事实感到非常困惑。(预计尺寸会更小,而且要小得多)

两个集群上的版本相同:MongoDB shell 版本:2.4.6

谢谢你,vr

4

1 回答 1

3

mongodump转储数据库中所有集合的数据和索引(或数据库,如果您要转储很多)。它不会转储除索引以外的任何元数据,这意味着如果您将转储恢复到分片集合中,它将被分片(分成块,平衡)。如果您将数据恢复到未分片的集合中,那么它将保持未分片。

转储是否来自分片集合无关紧要,因为该信息保留在集群中,不与数据一起使用。

于 2014-04-27T00:52:21.700 回答