Mongodb 不使用mongodump命令转储和恢复mongo数据库
我需要一种为特定mongo数据库生成快照的方法,并能够在另一台服务器上重新创建该数据库。我熟悉Mongodb 不使用mongodump命令转储和恢复mongo数据库,mongodb,mongodump,mongorestore,Mongodb,Mongodump,Mongorestore,我需要一种为特定mongo数据库生成快照的方法,并能够在另一台服务器上重新创建该数据库。我熟悉mongodump和mongorestore命令,但是我需要一个可供人阅读的文件(或者更好地将所有内容打印到stdout)用于整个数据库,而mongodump还没有这样做,这是已知的、预期的和需要的。我有两个相关的问题 首先,mongodump是否会生成除集合名称和索引(在转储特定数据库时)之外的任何其他关键数据?如果是,它会生成什么?如果我没记错的话,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文件中有一段时间了,它工作得非常好,并且很容易对它们进行比较。现在,我正试图将其系统化,并弄清楚这种方法是否能涵盖其他更复杂的情况。