我已经在 3 分片集群上针对大小为 600GB 的数据库执行了“mongodump”,并且 block 均匀分布在所有 3 个分片上。
我的 mongodump 命令是这样的:
mongodump --db mydb123 --authenticationDatabase admin --journal -u root -p password123 -o mydb123
block 几乎平均分布在所有 3 个分片中。 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
然后我将转储文件移动到一个新的集群,并在新的 2-shard 集群上执行这个转储文件的“mongorestore”。这个数据库的大小现在只有 80 GB。我想这是预料之中的(紧凑的 Action )。 但这是我的问题:在新的 2-shard 集群上,执行命令“sh.status()”不会显示该数据库的任何 CHUNKS。 我的 mongorestore 命令是这样的:
mongorestore -u root -p newpass123 --authenticationDatabase admin --verbose/data/db/backups/new_dir/mydumpfile
++++++++++++++++++++++++++++++++++++++ 执行这个 mongorestore 命令没有出错。 SH.STATUS() 的实际输出如下所示:
mongos> sh.状态() --- 分片状态 --- 分片版本:{ “_id”:1, “版本”:3, “最小兼容版本”:3, “当前版本”:4, “clusterId”:ObjectId(“52efaaa0a83668acafc3bcb0”) } 碎片: { “_id”:“sh1”,“主机”:“sh1/hfdvmprmongodb1:27000,hfdvmprmongodb2:27000”} { “_id”:“sh2”,“主机”:“sh2/hfdvmprmongodb1:27001,hfdvmprmongodb2:27001”} 数据库: {“_id”:“管理员”,“分区”:假,“主要”:“配置”} {“_id”:“测试”,“分区”:假,“主要”:“sh1”} {“_id”:“定价”,“分区”:真实,“主要”:“sh2”} { "_id": "mokshapoc", "partitioned": true, "primary": "sh1"}
mongos> isBalancerRunning() 2 月 4 日星期二 11:09:39.242 ReferenceError:未定义 isBalancerRunning 蒙戈斯> sh.isBalancerRunning() 是的
++++++++++++++++++++++++++++++++++++++++++++++++++++++ 因此,我已经完全完成了 mongorestore,并且没有显示 80 GB 数据库的 CHUNKS(在 mongodump 执行时曾经是 600 GB 的数据库)
我很困惑,因为我没有看到任何 block 。 (尺寸预计会更小,而且小了很多)
两个集群上的版本相同: MongoDB 外壳版本:2.4.6
谢谢, 虚拟机
最佳答案
mongodump
转储数据库中所有集合的数据和索引(如果转储很多,则为数据库)。它不会转储索引以外的任何元数据,这意味着如果您将转储恢复到分片集合中,它将被分片(分成 block ,平衡)。如果您将数据恢复到未分片的集合中,那么它将保持未分片状态。
转储是否来自分片集合并不重要,因为该信息保留在集群中,不会随数据一起移动。
关于mongodb mongodump mongorestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560953/