要将您自己的数据加载到 Atlas Infinite 集群中,请使用以下方法之一:
mongodump 和 mongorestore:
mongodump从现有的 MongoDB 独立运行的实例或副本集(包括 Atlas Core 集群)创建数据的二进制导出,然后mongorestore将数据加载到 Atlas Infinite 集群中。当源数据位于 MongoDB 部署中时,请使用此方法。要了解如何操作,请参阅 从 MongoDB 部署恢复数据。mongoimport:
mongoimport将文档从JSON或CSV文件加载到 Atlas Infinite 集群中。当源数据位于 MongoDB 外部的文件中时,请使用此方法。该文件可以来自mongoexport或第三方导出工具。要了解具体方法,请参阅 从 JSON 或 CSV 文件导入数据。
这些方法中的每一种都会消耗目标 Atlas Infinite 集群上的写入容量。为了限制对应用程序的影响,请在系统使用率较低时或在计划的维护窗口期间运行大数据负载。
先决条件
完成以下先决条件:
创建一个目标 Atlas Infinite 集群。要了解更多信息,请参阅 创建 Atlas Infinite 或 Atlas Core 集群。
要使用
mongodump、mongorestore或mongoimport,请在该托管上安装最新稳定版本的 MongoDB Database Tools。要了解如何操作,请参阅 MongoDB Database Tools 安装指南。
从 MongoDB 部署恢复数据
mongodump 创建现有 MongoDB 独立运行的实例或副本集的二进制导出,mongorestore 将该导出加载到 Atlas Infinite 集群中。导出内容包括源部署中的数据、元数据和索引。有关从现有 MongoDB 分片集群复制数据的指导,请参阅 请求支持。
您还可以使用此过程将数据从 Atlas Core 上的 Free 集群或 Flex 集群迁移到 Atlas Infinite 上的专用集群。若要就地扩展 Free 集群或 Flex 集群而不是迁移数据,请参阅将 Free 或 Flex 集群扩展为专用集群。
此过程需要停机。停止对源部署的写入,运行 mongodump 和 mongorestore,然后将您的应用程序切换到 Atlas Infinite 集群。
Considerations
在运行此过程之前,请考虑以下行为:
数据一致性:为避免数据丢失,请在运行
mongodump之前暂停对源部署的写入。如果您从 从节点(secondarymongodumpnode from replica set) 运行 ,请暂停写入,然后等待从节点(secondary node from replica set)赶上主节点 (primary node in the replica set),然后再开始转储。用户和角色:Atlas 托管数据库用户,因此
mongorestore无法将现有的数据库用户或角色迁移到目标集群。在目标 Atlas Infinite 集群中创建应用程序所需的数据库用户。要了解更多信息,请参阅配置数据库用户。排除的命名空间:转储中的
admin和config目录保存着mongorestore无法添加到 Atlas Infinite 集群的用户信息,因此,该过程排除admin.*和config.*。托管资源:
mongodump在具有源部署网络访问权限的托管上运行,而mongorestore在具有存档文件访问权限和目标部署网络访问权限的托管上运行。这两种工具都会占用托管上的 CPU 和内存,这可能会影响该托管的性能。
步骤
在源部署中设置数据库用户。
如果源部署强制执行身份验证,则 mongodump 必须以能够读取您迁移的每个数据库的数据库用户身份进行身份验证。admin 数据库上的 backup 角色授予这些权限。
如果您的源部署中不存在此类用户,请创建一个。要了解如何创建和管理数据库用户,请参阅您的部署类型对应的以下页面:
对于 Atlas 托管的集群,请参阅配置数据库用户。
对于自管理部署,请参阅 管理自管理部署中的用户和角色。
在目标 Atlas Infinite 集群中设置数据库用户。
mongorestore 必须以能够写入您迁移的每个数据库的数据库用户身份进行身份验证。目标 Atlas Infinite 集群上的 Atlas admin 角色授予这些权限。
如果您的目标 Atlas Infinite 集群中不存在此类用户,请创建一个。如需了解如何在 Atlas 中创建和管理数据库用户,请参阅“配置数据库用户”。
授予您的托管网络访问源部署和目标部署的权限。
确保运行 mongodump 和 mongorestore 的托管能够访问这两个部署:
将托管添加到包含目标 Atlas Infinite 集群的项目 IP 访问列表中。要了解如何将托管添加到 IP 访问列表,请参阅配置 IP 访问列表条目。
如果您的源部署是不同项目中的 Atlas Core 集群,请也将该托管添加到该项目的 IP 访问列表中。如果您的源部署是自管理的,请配置其防火墙以接受来自托管的连接。要了解更多信息,请参阅 网络和配置强化。
如果设置 VPC 对等互连,可以将对等方的 VPC CIDR 区块或子网,或对等方 VPC 的安全组添加到 IP 访问列表中。要了解更多信息,请参阅 IP 访问列表。
运行 mongodump。
汇编
mongodump命令。以下
mongodump命令模板使用其连接字符串连接到源副本集或独立运行的实例集群,并将转储的存档输出到文件。将模板复制到您喜爱的文本编辑器中,并将
<connectionString>占位符替换为源部署的连接字符串,将<fileName>替换为要创建的存档文件的名称。mongodump --uri "<connectionString>" --archive=<fileName>.archive要学习如何为部署源构建连接字符串,请参阅 连接字符串。
注意
如果在 Ubuntu 18.04上使用
mongodump或mongorestore,则在使用带有--uri选项的SRV 连接字符串(采用mongodb+srv://形式)时,您可能会遇到cannot unmarshal DNS错误消息。 如果是这样,请改用以下选项之一:带有非 SRV 连接string的
--uri选项(采用mongodb://形式)--host选项指定直接连接的主机
在可以访问源部署的托管上,从终端或命令提示符运行已完成的命令。
例子
以下
mongodump命令使用 SRV 连接字符串连接到源 Atlas Core 集群,该字符串包含在admin数据库上具有backup角色的数据库用户的用户名 (mySourceUsername) 和密码 (mySourcePassword)。该命令将转储的存档输出到当前工作目录中名为mongodump.archive的文件。mongodump --uri "mongodb+srv://mySourceUsername:mySourcePassword@cluster0.example.mongodb.net" \ --archive="mongodump.archive"
运行 mongorestore。
汇编
mongorestore命令。以下
mongorestore命令模板使用其连接字符串连接到目标 Atlas Infinite 集群,并恢复由mongodump创建的存档。它使用--nsExclude排除admin和config数据库,这些数据库由 Atlas 托管。将模板复制到您首选的文本编辑器中,并将以下占位符替换为适当的值:
<connectionString>: 将其替换为用于您的目标 Atlas Infinite 集群的 SRV 连接字符串。要检索或构建用于目标集群的连接字符串,请参阅 连接字符串。在连接字符串中包含具有
Atlas admin角色的数据库用户的用户名和密码。<filePath>: 将其替换为由mongodump创建的存档文件的路径。
mongorestore --uri "<connectionString>" \ --archive="<filePath>" \ --nsExclude "admin.*" \ --nsExclude "config.*"在有权访问由
mongodump创建的存档文件的托管上,从终端或命令提示符运行已完成的命令。例子
以下
mongorestore命令使用 SRV 连接字符串连接到 Atlas Infinite 集群。该连接字符串包含具有Atlas admin角色的数据库用户的用户名 (myDestinationUsername) 和密码 (myDestinationPassword)。该命令恢复位于mongodump.archive的存档,该存档由mongodump创建,不包含admin和config数据库。mongorestore --uri "mongodb+srv://myDestinationUsername:myDestinationPassword@cluster0.example.mongodb.net" \ --archive="mongodump.archive" \ --nsExclude "admin.*" \ --nsExclude "config.*"
从 JSON 或 CSV 文件导入数据
mongoimport 读取 JSON 或 CSV 文件,并将每条记录插入到 Atlas Infinite 集群中的集合中。该文件可以来自第三方导出工具。要将数据从 MongoDB 部署恢复到 Atlas Infinite 集群,请参阅 从 MongoDB 部署恢复数据。
Considerations
在运行此过程之前,请考虑以下行为:
Extended JSON:
mongoimport对某些 BSON types 使用严格模式表示形式。仅限文档:与
mongorestore不同,mongoimport仅加载文档,而不加载集合选项或索引定义。导入完成后,在目标 Atlas Infinite 集群上创建索引。托管资源:
mongoimport在托管您的文件的托管上运行,并使用该托管上的 CPU 和内存。其他界面: 要在没有命令行的情况下加载文件,请使用 MongoDB Compass,它可以导入
JSON和CSV文件,或使用 用户界面 Atlas,它可以插入您粘贴或输入的JSON文档。
步骤
AtlasGoDatabase & Network Access在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Security 标题下的 Database & Network Access。
完成上述步骤后,将显示数据库和网络访问页面。
在目标 Atlas 集群中设置数据库用户。
要运行 mongoimport 以便向 Atlas 集群写入数据,您必须指定对要导入数据的数据库具有读写权限的数据库用户。示例,具有Atlas admin角色的用户提供这些权限。
如果不存在该用户,则创建该用户:
如果尚未显示,请单击 Database Users 标签页。
单击 Add New Database User(添加新的数据库用户)。
添加 Atlas admin 用户。
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
在侧边栏中,单击 Database 标题下的 Clusters。
会显示集群页面。
更新 IP 访问列表。
如果要运行 mongoimport 的主机不在 IP Access List(IP 访问列表)中,请更新该列表。您可以指定以下任一项:
mongoimport将运行的服务器的公共 IP 地址,或者如果已为 VPC 对等互连进行设置,则为对等方的 VPC CIDR 区块(或子网)或对等方 VPC 的安全组(如果将 AWS 选作云提供商)。
复制目标集群URI / 托管信息。
您可以使用 Atlas 集群的连接字符串 URI 连接到 Atlas 集群。在连接对话框中执行以下步骤:
单击 Drivers(连接)。
复制在第 1 步中找到的连接字符串。
将 PASSWORD 替换为 root 用户的密码,并将 DATABASE 替换为您要连接的数据库的名称。
重要
您必须对所提供的
<PASSWORD>中的@字符的任何实例进行转义。例如,p@ssword应为p%40ssword。
此连接字符串在 --uri 选项中指定为 mongoimport。
使用 --host 时,如果 Atlas 集群是副本集,您还必须检索副本集名称。例如:
myAtlasRS/atlas-host1:27017,atlas-host2:27017,atlas-host3:27017写入您生成的数据
批量写入操作会在单个请求中向 Atlas Infinite 集群发送多次写入,从而减少网络往返次数并提高写入吞吐量。选择此方法可将您生成的文档写入 Atlas Infinite 集群,而不是从现有部署或文件中复制数据。
Considerations
在运行此过程之前,请考虑以下行为:
批量写入行为:您在批量写入请求中指定的写入操作和选项决定了 MongoDB 如何对写入操作进行排序、处理错误以及报告请求结果。要了解这些选择如何影响批量写入行为,请参阅
bulkWrite()参考页面。其他接口:若要写入少量文档且无需批处理逻辑,请使用
insertMany()或insertOne()(来自mongosh或 MongoDB 驱动程序),或者使用 Atlas 用户界面,该界面可插入您粘贴或输入的JSON个文档。
步骤
连接到您的 Atlas Infinite 集群。
要在此过程中运行批量写入操作,请使用 mongosh 连接到您的集群。要了解如何操作,请参阅 连接到 Atlas 集群。
您还可以通过 MongoDB 驱动程序的应用程序代码、Atlas 用户界面或连接到集群的任何其他界面运行批量写入操作。要了解每个界面中的等效操作,请参阅 批量写入操作。
运行批量写入操作。
要写入单个集合,请运行 bulkWrite()。要了解有关写入操作类型和批量写入选项的更多信息,请参阅 bulkWrite()。
示例,以下命令将两个文档插入到 inventory 集合中:
db.inventory.bulkWrite( [ { insertOne: { document: { _id: ObjectId("68b1c2d3e4f5a6b7c8d9e0f1"), item: "notebook", qty: 50 } } }, { insertOne: { document: { _id: ObjectId("68b1c2d3e4f5a6b7c8d9e0f2"), item: "pencil", qty: 100 } } }] )要在一个请求中写入多个集合或数据库,请运行 bulkWrite() 并为每个操作指定命名空间。示例,以下命令将一个文档插入到 sales.inventory 集合中,并将一个文档插入到 supplies.inventory 集合中:
db.getMongo().bulkWrite( [ { namespace: "sales.inventory", name: "insertOne", document: { item: "notebook", qty: 50 } }, { namespace: "supplies.inventory", name: "insertOne", document: { item: "pencil", qty: 100 } }] )默认情况下,批量写入操作会按顺序运行,并在遇到第一个错误时停止。要了解如何配置运行顺序,请参阅 操作执行。
限制
Atlas Infinite 的完整公共预览版限制列表请参阅公共预览版可用性。将数据加载到 Atlas Infinite 集群时,存在以下限制:
无 oplog 重放:Atlas Infinite 不支持 oplog 重放。不要将
mongodump --oplog选项或mongorestore --oplogReplay选项与 Atlas Infinite 集群一起使用。Queryable Encryption 和客户端字段级加密:您不能将
mongodump或mongorestore与使用 Queryable Encryption 或 客户端字段级加密 的集合一起使用。跨版本实时迁移和恢复:Atlas Infinite 不支持 Atlas Core 集群和 Atlas Infinite 集群之间的实时迁移或备份和恢复。两种部署选项之间的架构差异使快照和实时迁移不兼容。