Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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命令转储和恢复mongo数据库_Mongodb_Mongodump_Mongorestore - Fatal编程技术网

Mongodb 不使用mongodump命令转储和恢复mongo数据库

Mongodb 不使用mongodump命令转储和恢复mongo数据库,mongodb,mongodump,mongorestore,Mongodb,Mongodump,Mongorestore,我需要一种为特定mongo数据库生成快照的方法,并能够在另一台服务器上重新创建该数据库。我熟悉mongodump和mongorestore命令,但是我需要一个可供人阅读的文件(或者更好地将所有内容打印到stdout)用于整个数据库,而mongodump还没有这样做,这是已知的、预期的和需要的。我有两个相关的问题 首先,mongodump是否会生成除集合名称和索引(在转储特定数据库时)之外的任何其他关键数据?如果是,它会生成什么?如果我没记错的话,mongo可能不喜欢不同版本的转储,这也可能是个问

我需要一种为特定mongo数据库生成快照的方法,并能够在另一台服务器上重新创建该数据库。我熟悉
mongodump
mongorestore
命令,但是我需要一个可供人阅读的文件(或者更好地将所有内容打印到stdout)用于整个数据库,而
mongodump
还没有这样做,这是已知的、预期的和需要的。我有两个相关的问题

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

第二,如果我手动提取集合名称和索引信息,将其存储到我自己格式的json中,然后在另一台服务器上恢复,这是否足以创建相同的数据库,还是缺少什么

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

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

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

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

第二,如果我手动提取集合名称和索引信息,将其存储到我自己格式的json中,然后在另一台服务器上恢复,这是否足以创建相同的数据库,还是缺少什么

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

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


如果您的备份/恢复过程考虑到了这一点,那么您可以使用类似于表示其他类型的内容,使两个数据库更加一致。

检查mongoexport命令。它将数据导出到CSV、TSV或JSON文件。您可以检查mongoexport命令并读取它的功能以及它与mongodump的区别……这太完美了。我不知道元数据在这里的作用,我将对此进行更深入的研究。非常感谢!还有一件事,我是否正确理解了类型与特定文档相关,而不是一般的集合,以及元数据中存储的内容?否,
metadata.json
只是使用相同的选项和索引重新创建集合。收集选项是您将传递给或的选项。文档中的字段类型存储在每个文档中。@IanBytchek另外,我很好奇为什么转储文件需要“人类可读”格式。我会使用
mongodump
进行备份,而不是重复开发自己的解决方案。如果需要,您可以使用MongoDB命令行工具附带的工具将BSON转换为人类可读的格式。我正在设计一个项目,为sql和mongo进行数据库迁移。比较两者,使用sql数据库,您可以将所有内容转储到单个文件中,然后与其他转储进行比较。和mongo在一起并不容易。我已经将基本mongo模式(集合和索引)存储在单独的可恢复json文件中有一段时间了,它工作得非常好,并且很容易对它们进行比较。现在,我正试图将其系统化,并弄清楚这种方法是否能涵盖其他更复杂的情况。