从可查询旧版备份恢复数据库
重要
传统备份已弃用
自 2020 年 3 月 23 日起,所有新集群只能使用云备份。
当升级到 5.0 时,如果备份系统当前设置为传统备份,则它会升级到云备份。在进行该升级后:
所有现有的传统备份快照仍然可用。 根据您的保留策略,它们会随着时间的推移而过期。
Atlas 支持通过查询旧版备份快照来恢复数据库。
重要
Atlas 不支持查询云备份。
您可以使用可查询备份快照导出数据库的数据并恢复到目标部署。 以下过程通过 Atlas 提供的隧道连接到可查询备份实例。
注意
您必须具有包含源集群和目标集群的 Atlas 项目的 Project Owner
角色,才能将数据从一个 Atlas 集群恢复到另一个集群。
先决条件
重要
仅当恢复到同一数据库时,才必须在恢复期间停止客户端操作。
恢复期间的客户端操作
您必须确保目标 Atlas 集群在恢复期间不会收到客户端请求。 适用于以下使用案例:
如果计划恢复到同一数据库,则必须在恢复期间停止客户端操作。
如果计划恢复到其他数据库,则无需停止客户端应用程序。 在这种情况下,您可以恢复到新的 Atlas 集群,并在新部署运行后重新配置应用程序以使用该新集群。
步骤
使用mongodump
从可查询备份中导出单个数据库。
- 要从数据库导出数据:
包括以下
mongodump
选项以连接到隧道:--port
设置为隧道的端口。--db
,设置为要导出的数据库的名称。--out
设置为一个空目录,以输出数据转储。重要
确保运行
mongodump
的用户可以写入指定目录。
mongodump --port <port for tunnel> --db <single-database> --out <data-dump-path> 例如,要连接到在端口
27020
上运行的隧道,将数据从test
数据库转储到/mydata/restoredata/
目录:mongodump --port 27020 --db test --out /mydata/restoredata/ mongodump
会将test
数据库文件输出到/mydata/restoredata/test/
目录中。如果
mongodump
不在$PATH
中,请在运行命令时指定该工具的路径。
使用mongorestore
恢复单个数据库。
- 要恢复单个数据库,请执行以下操作:
包括以下
mongorestore
选项:注意
要恢复到 Atlas 集群,我们建议您使用
--uri
选项通过 DNS 种子列表连接字符串进行连接。--uri
设置为目标集群的连接字符串。--db
设置为目标数据库的名称。
注意
如果密码包含特殊字符,则必须使用百分号编码。
(可选)可以包含
--drop
选项,以便在数据库已存在的情况下删除目标集群中的数据库。
mongorestore --uri "mongodb://username:password@mongodb0.example.com:<Port>,mongodb1.example.com:<Port1>,mongodb2.example.com:<Port2>" --ssl --db <destination database> <data-dump-path/database> --drop
mongorestore --uri "mongodb+srv://username:password@cluster0.example.mongodb.net" --db <destination database> <data-dump-path/database> --drop
注意
如果在 Ubuntu 18.04上使用mongodump
或mongorestore
,则在使用带有--uri
选项的SRV 连接字符串(采用mongodb+srv://
形式)时,您可能会遇到cannot unmarshal DNS
错误消息。 如果是这样,请改用以下选项之一:
带有非 SRV 连接string的
--uri
选项(采用mongodb://
形式)--host
选项指定直接连接的主机
例如,要从 /mydata/restoredata/test
目录恢复到新数据库 restoredTest
:
mongorestore --uri "mongodb://username:password@00.foo.mongodb.net:27017,01.foo.mongodb.net:27017,02.foo.mongodb.net:27017" --ssl --db restoredTest /mydata/restoredata/test --drop
该示例假设目标副本集的主节点 (primary node in the replica set)mongos分片的端口27017
。
mongorestore --uri "mongodb+srv://username:password@cluster0.example.mongodb.net" --db restoredTest /mydata/restoredata/test --drop