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

Dump and restore mongo database without mongodump command

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

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

其次,如果我手动提取集合名称和索引信息,将其存储为我自己的格式的json,然后在另一台服务器上恢复它,是否足以创建相同的数据库或将是不是少了什么?

First, does mongodump produce any other critical data besides collection names and indexes (when dumping a specific database) and if it does what is it?

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

If I recall correctly, mongo might not like dumps made in different versions, which also might be a problem, is that true?

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

Second, if I manually extract collection names and index information, store it into a json of my own format, and then restore it on another server, will that be sufficient to create the identical database or would it be missing something?

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

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

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