Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb mongodump mongorestore_Mongodb_Mongodump_Mongorestore - Fatal编程技术网

mongodb mongodump mongorestore

mongodb mongodump mongorestore,mongodb,mongodump,mongorestore,Mongodb,Mongodump,Mongorestore,我在3-shard集群上对大小为600GB的数据库执行了“mongodump”,数据块平均分布在所有3个碎片上 我的mongodump命令如下: mongodump--db mydb123--authenticationDatabase admin--journal-u root-p password123-o mydb123 块几乎均匀地分布在所有3个碎片上。 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 然后我

我在3-shard集群上对大小为600GB的数据库执行了“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()”不会显示该数据库的任何块。 我的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(“52EFAA0A83668ACAFC3BCB0”) } 碎片: {“_id”:“sh1”,“host”:“sh1/hfdvmprmongodb1:27000,hfdvmprmongodb2:27000”} {“_id”:“sh2”,“host”:“sh2/hfdvmprmongodb1:27001,hfdvmprmongodb2:27001”} 数据库: {“_id”:“admin”,“partitioned”:false,“primary”:“config”} {“_id”:“test”,“partitioned”:false,“primary”:“sh1”} {u id:“定价”,“分区”:true,“主”:“sh2”} {“_id”:“mokshapoc”,“partitioned”:true,“primary”:“sh1”}

mongos>isBalancerRunning() 周二2月4日11:09:39.242参考错误:未定义isBalancerRunning mongos>sh.isbalancer运行() 真的

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

我很困惑,因为我没有看到任何块。 (预计尺寸会更小,而且要小得多)

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

谢谢,,
vr

mongodump
转储数据库中所有集合的数据和索引(如果要转储许多集合,则转储数据库)。它不会转储除索引之外的任何元数据,这意味着如果将转储还原到分片集合中,它将被分片(分为块,平衡)。如果将数据还原到未归档的集合中,则该集合将保持未归档状态


转储是否来自分片收集并不重要,因为该信息保留在集群中,而与数据无关

我不想成为mongodb专家。只是在我看来,我在某个地方听说分裂是由插入触发的。尝试将新文档插入到碎片集合中。可能会有帮助。我怀疑你还原到的数据库与你正在检查的数据库的状态不同。请编辑问题,包括调用mongo或mongos以及后续命令,以便我们看到您附加到哪个db。为了回应Kevin J.Rice的评论(见上文),我想澄清一下,mongodump和mongorestore中的数据库名称完全相同。但是,我必须遵守公司政策,我已经从最初的帖子中删除了实际的数据库名称和用户名/密码信息。抱歉,如果这造成了任何混乱。感谢您的投入和帮助。在运行
mongorestore
之前,您是否已经创建并切分了目标数据库和集合
mongorestore
不会更改目标数据库的任何分片选项,因此缺少分片可能是因为您的目标没有分片。@vrdba,mongodump创建的转储不会反映分片或数据的分布。如果要在将转储还原到分片群集时将数据分发到分片,则必须在运行mongorestore之前对集合进行分片。您可以在此处找到更多信息: