在没有 mongodump 命令的情况下转储和恢复 mongo 数据库
Dump and restore mongo database without mongodump command
我需要一种为特定 mongo 数据库生成快照并能够在另一台服务器上重新创建该数据库的方法。我熟悉 mongodump
和 mongorestore
命令, 但是 我需要整个数据库的单个人类可读文件(或者最好将所有内容打印到标准输出), 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 之类的东西来表示其他类型,您可能可以使两个数据库更加一致。
我需要一种为特定 mongo 数据库生成快照并能够在另一台服务器上重新创建该数据库的方法。我熟悉 mongodump
和 mongorestore
命令, 但是 我需要整个数据库的单个人类可读文件(或者最好将所有内容打印到标准输出), 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 之类的东西来表示其他类型,您可能可以使两个数据库更加一致。