播种 mongorestore
您可以使用 mongodump
和mongorestore
使用现有 MongoDB 独立运行版或副本集的数据为 MongoDB Atlas 集群播种。有关从现有 MongoDB 分片集群配置种子数据的指导,请联系 Atlas 支持部门:
在 Atlas 中,转到Project Support 页面。
如果尚未显示,请选择包含所需项目的组织导航栏中的Organizations菜单。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
在 Projects(项目)菜单旁边,展开 Options(选项)菜单,然后单击 Project Support(项目设置)。
显示“项目支持”页面。
虽然您可以使用 Atlas 用户界面将 M0
免费层级集群扩展到M10+
付费集群,但您也可以使用本节中的mongodump
和mongorestore
过程从M0
免费层级复制数据。将层级集群升级为M10+
集群。
注意事项
推荐的mongodump
和mongorestore
版本
对于此过程,请使用最新稳定版本的mongodump
和mongorestore
。
所需停机时间
为确保最新的迁移,请安排一个维护窗口,您可以在其中停止对源集群的所有写入。 在此过程的mongodump
部分完成后,向源集群发出的任何写操作都不会迁移到目标集群。
mongorestore
完成数据恢复后,您必须将应用程序切换到目标 Atlas 集群,然后才能恢复写入操作。要连接到 Atlas 集群,请参阅连接到集群。
所需的总停机时间取决于多种因素,例如要迁移的数据大小以及源集群与 Atlas 之间的网络连接。如果您对延长的停机时间有任何疑问或顾虑,请联系 Atlas 支持部门:
在 Atlas 中,转到Project Support 页面。
如果尚未显示,请选择包含所需项目的组织导航栏中的Organizations菜单。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
在 Projects(项目)菜单旁边,展开 Options(选项)菜单,然后单击 Project Support(项目设置)。
显示“项目支持”页面。
集群安全性
Atlas 管理数据库用户创建。如果源集群强制执行身份验证:
允许对主节点进行读取访问。
如果要将
mongorestore
与--oplogReplay
选项一起使用,则必须从mongodump
创建的dump
目录中删除admin
和config
目录。admin
和config
目录包含您无法使用mongorestore
添加到 Atlas 集群的数据库用户信息。 使用mongorestore
--nsExclude
排除admin.system.*
命名空间。
您不能将任何现有用户或角色信息迁移到 Atlas。为目标 Atlas 集群创建适当的数据库用户,支持应用程序的使用模式。作为切换过程的一部分,更新应用程序,使用新的数据库用户。要了解更多信息,请参阅配置数据库用户。
性能
此过程需要在源集群中的主机上运行mongodump
和mongorestore
。 这些程序会占用 CPU 和内存等系统资源,可能会影响主机的性能。
在非系统使用高峰期或计划维护窗口期间运行此程序。如果来源是副本集,则可以在从节点的主机上运行此过程。停止写入集群后,在启动此过程之前,让从节点集群赶上主节点集群。
管道行为
此过程使用 Linux 管道 将mongodump
mongorestore
的输出流式传输到 。如果mongorestore
进程跟不上mongodump
进程,您可能会看到管道中断错误。
有关解决持续管道中断错误的指导,请联系 Atlas 支持部门:
在 Atlas 中,转到Project Support 页面。
如果尚未显示,请选择包含所需项目的组织导航栏中的Organizations菜单。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
在 Projects(项目)菜单旁边,展开 Options(选项)菜单,然后单击 Project Support(项目设置)。
显示“项目支持”页面。
步骤
以下教程使用mongodump
和mongorestore
将数据从现有MongoDB cluster上传到Atlas集群:
在源副本集中创建数据库用户。
重要
Optional
如果您的源集群不强制执行身份验证,则跳过此步骤。
如果源部署强制执行身份验证,则必须为此过程的一部分向数据库用户提供读取任何数据库的特权。 要了解有关数据库用户权限的更多信息,请参阅MongoDB 基于角色的访问控制。
如果不存在这样的用户,请在源 MongoDB 副本集中创建一个具有admin
数据库备份角色的用户。
汇编mongodump
命令。
根据您使用的连接字符串类型,将以下模板之一复制到您的首选文本编辑器中:
注意
要连接 Atlas 集群,我们建议您使用 --uri
选项,通过 DNS 种子列表连接字符串进行连接。
mongodump --uri "mongodb://username:password@mongodb0.example.com:<Port>,mongodb1.example.com:<Port1>,mongodb2.example.com:<Port2>/?replicaSet=<ReplicaSetName>&authSource=admin" \ --archive
用副本集节点的信息替换主机示例。将 <ReplicaSetName>
替换为源副本集的名称。
对于独立运行的部署,请排除 replicaSet=<ReplicaSetName>
并仅指定独立运行的部署的主机名。例如,--uri "mongodb://standalone-mongod.example.net:27017"
mongodump --uri "mongodb+srv://username:password@cluster0.example.mongodb.net" \ --archive
注意
如果在 Ubuntu 18.04上使用mongodump
或mongorestore
,则在使用带有--uri
选项的SRV 连接字符串(采用mongodb+srv://
形式)时,您可能会遇到cannot unmarshal DNS
错误消息。 如果是这样,请改用以下选项之一:
带有非 SRV 连接string的
--uri
选项(采用mongodb://
形式)--host
选项,用于指定要直接连接的主机
注意
如果密码包含特殊字符,则必须使用百分号编码。
先不要运行此命令。修改模板后请继续下一步操作。
在目标 Atlas 集群中设置数据库用户。
要针对 Atlas 集群运行mongorestore
,您必须在 Atlas 集群中指定具有Atlas admin
角色的数据库用户。
如果不存在该用户,则创建该用户:
在 Atlas 中,转到Organization Access Manager页面。
如果尚未显示,请从导航栏中的Organizations菜单。
执行以下步骤之一:
从导航栏的Access Manager菜单中选择Organization Access 。
单击侧边栏中的 Access Manager(支持)。
显示“组织访问管理器”页面。
单击 Add New Database User(添加新的数据库用户)。
添加 Atlas admin 用户。
要了解有关用户管理的更多信息,请参阅配置数据库用户。
在 AtlasClusters 中,转到项目的 页面。
如果尚未显示,请选择包含所需项目的组织导航栏中的Organizations菜单。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果 Clusters(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。
此时会显示“集群”页面。
检索并修改mongorestore
连接模板。
Command Line Tools标签页的Binary Import and Export Tools部分显示一个可复制的模板,其中包含将mongorestore
连接到 Atlas 集群所需的最低选项。
此模板包含某些选项的占位符值。 将模板复制粘贴到您的首选文本编辑器中, 然后进行以下修改:
password
:将其替换为username
中指定的用户的密码。该模板包括一个项目数据库用户,作为username
的值。如果要以其他用户身份进行身份验证,请替换username
的值,并在password
中指定该用户的密码。添加
--nsExclude
并将其值设置为"admin.system.*"
。
根据使用的连接字符串类型,您的模板应类似于以下命令之一:
mongorestore --uri "mongodb://username:password@00.foo.mongodb.net:27017,01.foo.mongodb.net:27017,02.foo.mongodb.net:27017/?replicaSet=myRepl&authSource=admin" \ --archive \ --ssl \ --nsExclude "admin.system.*"
mongorestore --uri "mongodb+srv://username:password@cluster1.example.mongodb.net" \ --archive \ --nsExclude "admin.system.*"
运行mongodump
和mongorestore
重要
确保运行mongodump
和mongorestore
的主机位于项目IP 访问列表中。
要查看项目 IP 访问列表,请单击侧边栏 Security 部分中的 Network Access。随后会显示 IP Access List 标签页。
在您的首选文本编辑器中,使用竖线|
操作符分隔mongodump
和mongorestore
命令。 根据您使用的连接string类型,最终命令应类似于以下命令之一:
mongodump --uri "mongodb://username:password@mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=sourceRS&authSource=admin" \ --archive \ | \ mongorestore --uri "mongodb://username:password@00.foo.mongodb.net:27017,01.foo.mongodb.net:27017,02.foo.mongodb.net:27017/?replicaSet=myAtlasRS&authSource=admin" \ --archive \ --ssl \ --nsExclude "admin.system.*"
mongodump --uri "mongodb+srv://username:password@cluster0.example.mongodb.net" \ --archive \ | \ mongorestore --uri "mongodb+srv://username:password@cluster1.example.mongodb.net" \ --archive \ --nsExclude "admin.system.*"
从连接到源群集主机的终端 或 Shell 运行已完成的命令。
成功完成该过程后,使用mongosh
连接到您的 Atlas 集群并验证该过程的结果。要了解如何操作,请参阅通过mongosh
连接。
您必须更新应用程序,指向 Atlas 集群,然后才能恢复写操作。如需了解如何将应用程序连接到 Atlas,请参阅通过驱动程序连接。