要将自己的数据加载到Atlas Infinite集群,请使用以下方法之一:
mongodump 和 mongorestore:
mongodump从现有MongoDB独立运行或副本集(包括Atlas Core集群)创建数据的二进制导出,mongorestore将数据加载到Atlas无限集群。当源数据位于MongoDB 部署中时,请使用此方法。要学习;了解如何操作,请参阅从MongoDB部署中恢复数据。mongoimport:
mongoimport将文档从JSON或CSV文件加载到Atlas Infinite集群中。当源数据位于MongoDB外部的文件中时,请使用此方法。该文件可以来自mongoexport或第三方导出工具。要学习;了解如何操作,请参阅从JSON或逗号分隔值(CSV)文件导入数据。批量写入操作: MongoDB 数据库方法写入Atlas Infinite集群。当您自己从应用程序、
mongosh、 Atlas 用户界面或其他界面生成或转换文档时,请使用此方法。要学习;了解如何操作,请参阅写入您生成的数据。
其中每种方法都会占用目标Atlas Infinite集群的写入容量。为了限制对应用程序的影响,请在非系统使用高峰或计划的维护窗口期间运行大量数据加载。
先决条件
完成以下先决条件:
从MongoDB部署恢复数据
mongodump 创建现有MongoDB独立运行或副本集的二进制导出,mongorestore 将其加载到Atlas Infinite集群中。导出内容包括源部署中的数据、元数据和索引。有关从现有MongoDB分片集群复制数据的指导,请参阅请求支持。
您还可以使用此步骤将数据从Atlas Core 上的免费集群或 Flex集群迁移到Atlas Infinite 上的专用集群。要就地扩展免费集群或 Flex集群而不是迁移数据,请参阅将免费或 Flex 集群扩展为专用集群。
此过程需要停机。停止写入源部署,运行mongodump 和 mongorestore,然后将应用程序切换到Atlas Infinite集群。
Considerations
在运行此过程之前,请考虑以下行为:
数据一致性:为避免丢失数据,请在运行
mongodump之前暂停对源部署的写入。如果您从从节点(secondary node from replica set)成员运行mongodump,请暂停写入,等待从节点(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访问列表条目。
如果您设立了VPC对等互连,则可以将对等VPC的 CIDR区块或子网,或者对等VPC的安全群组添加到IP访问列表。要学习;了解更多信息,请参阅IP访问列表。
运行 mongodump。
汇编
mongodump命令。以下
mongodump命令模板使用其连接字符串连接到源副本集或独立运行集群,并将转储的存档输出到文件。将模板复制到首选文本编辑器中,并将
<connectionString>占位符替换为源部署的连接字符串,将<fileName>替换为要创建的存档文件的名称。mongodump --uri "<connectionString>" --archive=<fileName>.archive 注意
mongodumpmongorestore如果在Ubuntu.18 上使用04 或cannot unmarshal DNS,则在使用带有 选项的 SRV 连接字符串(采用mongodb+srv://形式)时,可能会遇到--uri错误消息。如果是这样,请改用以下选项之一:--uri带有非 SRV连接字符串的 选项(格式为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排除Atlas管理的admin和config数据库。将模板复制到首选文本编辑器中,并将以下占位符替换为适当的值:
<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创建的位于mongodump.archive的存档,但不包括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
在运行此过程之前,请考虑以下行为:
扩展JSON :
mongoimport对某些BSON 类型使用严格模式表示。仅文档:与
mongorestore不同,mongoimport仅加载文档,而不加载集合选项或索引定义。导入完成后,在目标Atlas Infinite集群上创建索引。主机资源:
mongoimport在保存文件的托管上运行,并使用该托管上的 CPU 和内存。其他界面:要在不使用命令行下加载文件,请使用MongoDB Compass(导入
JSON和CSV文件)或Atlas用户界面(插入您粘贴或键入的JSON文档)。
步骤
在目标Atlas 集群中设置数据库用户。
要运行mongoimport 以写入Atlas 集群,您必须指定对要导入数据的数据库具有读写权限的数据库用户。示例,具有 Atlas admin角色的用户提供这些权限。
如果不存在该用户,则创建该用户:
如果尚未显示,请单击 Database Users 标签页。
单击 Add New Database User(添加新的数据库用户)。
添加 Atlas admin 用户。
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
在侧边栏中,单击 Database 标题下的 Clusters。
会显示集群页面。
更新 IP 访问列表。
如果要运行mongoimport 的托管不在IP访问列表中,更新该列表。您可以指定以下任一项:
将运行
mongoimport的服务器的公共 IP 地址,或者如果已为 VPC 对等互连进行设置,则为对等方的 VPC CIDR 区块(或子网)或对等方 VPC 的安全组(如果将 AWS 选作云提供商)。
复制目标集群URI/托管信息。
您可以使用 Atlas 集群的连接字符串 URI 连接到 Atlas 集群。在连接对话框中执行以下步骤:
单击 Drivers(连接)。
复制在第 1 步中找到的连接字符串。
将 PASSWORD 替换为 root 用户的密码,并将 DATABASE 替换为您要连接的数据库的名称。
重要
您必须对所提供的
<PASSWORD>中的@字符的任何实例进行转义。例如,p@ssword应为p%40ssword。
此连接字符串在mongoimport --uri选项中指定为 。
使用 --host 时,如果 Atlas 集群是副本集,您还必须检索副本集名称。例如:
myAtlasRS/atlas-host1:27017,atlas-host2:27017,atlas-host3:27017
写入您生成的数据
批量写入操作可在单个请求中向Atlas Infinite集群发送多次写入,从而减少网络往返次数并提高写入吞吐量。选择此方法可将生成的文档写入Atlas Infinite集群,而不是从现有部署或文件复制数据。
Considerations
在运行此过程之前,请考虑以下行为:
批量写入行为:您在批量写入请求中指定的写入操作和选项决定了MongoDB如何对写入操作进行排序、处理错误和报告请求结果。要学习;了解这些选择如何影响批量写入行为,请参阅
bulkWrite()参考页面。其他接口:要写入少量没有批处理逻辑的文档,请使用
mongosh中的insertMany()或insertOne()或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重放。请勿对Atlas Infinite 集群使用
mongodump --oplog或mongorestore --oplogReplay选项。Queryable Encryption和客户端字段级加密:不能将
mongodump或mongorestore用于使用Queryable Encryption或客户端字段级加密的集合。跨版本实时迁移和恢复: Atlas Infinite 不支持Atlas Core 和Atlas Infinite 集群之间的实时迁移或备份和恢复。两个部署选项之间的架构差异导致快照和实时迁移不兼容。