播种 mongorestore
您可以使用 mongodump
和 mongorestore
将现有 MongoDB 独立集或副本集的数据作为 MongoDB Atlas 集群的种子。有关从现有 MongoDB 分片集群配置种子数据的指导,请联系 Atlas 支持:
您可以使用 Atlas 用户界面将 M0
免费套餐集群扩展到 M10+
付费集群,也可以使用本节中的 mongodump
和 mongorestore
过程将数据从 M0
免费套餐集群复制到 M10+
集群。
Considerations
建议的 mongodump
和 mongorestore
版本
对于此过程,请使用最新稳定版本的mongodump
和mongorestore
。
所需停机时间
为确保最新的迁移,请安排一个维护窗口,您可以在其中停止对源集群的所有写入。 在此过程的mongodump
部分完成后,向源集群发出的任何写操作都不会迁移到目标集群。
在 mongorestore
完成数据恢复后,您必须将应用程序切换到目标 Atlas 集群,然后才能恢复写操作。要连接到 Atlas 集群,请参阅连接集群。
所需的总停机时间取决于多种因素,例如要迁移数据的大小以及源集群与 Atlas 之间的网络连接。如果您对延长的停机时间有任何疑问或顾虑,请联系 Atlas 支持部门:
集群安全性
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 支持部门:
步骤
以下教程使用mongodump
和mongorestore
将数据从现有MongoDB cluster上传到Atlas集群:
在源副本集中创建数据库用户。
重要
Optional
如果您的源集群不强制执行身份验证,则跳过此步骤。
如果源部署强制执行身份验证,则必须为此过程的一部分向数据库用户提供读取任何数据库的特权。 要了解有关数据库用户权限的更多信息,请参阅MongoDB 基于角色的访问控制。
如果不存在这样的用户,请在源 MongoDB 副本集中创建一个具有admin
数据库备份角色的用户。
例子
在 中运行以下命令,在 数据库上创建 ,并为其分配 角色。对于副本集,您必须对主节点 (primary node mongosh
in the replicamySourceUser
admin
backup
set)运行此命令。
use admin db.createUser( { user: "<mySourceUser>", pwd: "<mySourcePassword>", roles: [ "backup" ] } )
汇编 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 用户。
要了解有关用户管理的更多信息,请参阅配置数据库用户。
检索并修改 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 标签页。要了解更多信息,请参阅 IP 访问列表。
在您的首选文本编辑器中,使用竖线|
操作符分隔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,请参阅通过驱动程序连接。