在没有mongodump命令的情况下转储和恢复mongo数据库

时间:2015-02-25 08:34:50

标签: mongodb mongodump mongorestore

我需要一种方法来为特定的mongo数据库生成快照,并且能够在另一台服务器上重新创建该确切的数据库。我熟悉mongodumpmongorestore命令,但是我需要一个人类可读的文件(或者更好地将所有内容打印到stdout),整个数据库都是mongodump尚无法做到,这是已知的和预期的here are the details why。我有两个相关的问题。

首先,除了集合名称和索引(转储特定数据库时),mongodump是否会产生任何其他关键数据,如果它做了什么呢?如果我没记错的话,mongo可能不喜欢不同版本的转储,也可能是个问题,这是真的吗?

其次,如果我手动提取集合名称和索引信息,将其存储到我自己格式的json中,然后在另一台服务器上恢复,这是否足以创建相同的数据库,或者它会丢失什么?< / p>

1 个答案:

答案 0 :(得分:2)

  

首先,mongodump是否会产生除集合名称和索引之外的任何其他关键数据(当转储特定数据库时)以及它是什么?

mongodump生成数据的二进制备份,包括用于字段的特定BSON types。导出的其他元数据包括集合选项(如果您已从默认值更改任何选项)和索引定义。您可以在*.metadata.json创建的mongodump文件中看到此附加信息。

  

如果我没记错的话,mongo可能不喜欢不同版本的转储,这也可能是个问题,是真的吗?

通常,您应该能够使用较新的mongorestore版本重播较旧的转储。某些旧版本的mongodump可能无法导出您期望的所有集合元数据,因此一般建议是mongodump至少使用您正在运行的mongod服务器的版本,如果不是新。其中一个例子是2.2之前的mongodump,它没有创建metadata.json信息,所以你必须手动确保索引和集合选项。

  

其次,如果我手动提取集合名称和索引信息,将其存储到我自己格式的json中,然后在另一台服务器上恢复,这是否足以创建相同的数据库,或者它会丢失什么?< / p>

假设您重新创建所有集合&amp;索引选项(并在创建新集合时正确应用这些选项)您的数据库在远程服务器上将类似,但可能不相同。

主要区别在于字段的类型完整性(尽管这可能与您的用例无关)。 BSON支持比JavaScript更丰富的数据类型集。例如,JavaScript有一个Number类型,而BSON支持int32,int64和double。

如果您的备份/恢复过程使用MongoDB Extended JSON之类的内容来表示其他类型,则可以使这两个数据库更加一致。