2

我需要一种方法来为特定的 mongo 数据库生成快照,并能够在另一台服务器上重新创建该数据库。我熟悉mongodumpmongorestore命令,我需要一个用于整个数据库的人类可读文件(或者更好地将所有内容打印到标准输出),这mongodump还没有,这是已知和预期的,这里是详细信息为什么. 我有两个相关的问题。

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

其次,如果我手动提取集合名称和索引信息,将其存储为我自己格式的 json,然后在另一台服务器上恢复它,这足以创建相同的数据库还是会丢失一些东西?

4

1 回答 1

2

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

mongodump生成数据的二进制备份,包括用于字段的特定BSON 类型。导出的其他元数据包括集合选项(如果您更改了默认选项)和索引定义。您可以*.metadata.json在由mongodump.

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

一般来说,您应该能够使用较新mongorestore版本重播较旧的转储。一些旧版本mongodump可能不会导出您期望的所有集合元数据,因此一般建议是mongodump至少使用mongod您正在运行的服务器的版本(如果不是较新版本)。一个这样的例子是mongodump2.2 之前的版本,它没有创建metadata.json信息,因此您必须手动确保索引和收集选项。

其次,如果我手动提取集合名称和索引信息,将其存储为我自己格式的 json,然后在另一台服务器上恢复它,这足以创建相同的数据库还是会丢失一些东西?

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

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

如果您的备份/恢复过程考虑到这一点,使用MongoDB Extended JSON之类的东西来表示其他类型,您可能可以使两个数据库更加一致。

于 2015-03-19T01:20:54.460 回答