从 MongoDB 备份恢复自管理副本集
此程序概述了获取 MongoDB 数据并将此数据恢复到新 副本集的过程。使用此方法从生产备份进行数据库填充测试部署,或作为灾难恢复的一部分。
重要
您还可以使用 mongorestore
,通过 mongodump
创建的数据来恢复数据库文件。有关更多信息,请参阅使用 MongoDB 工具备份和恢复自管理部署。
将数据库恢复到单节点副本集
获取 MongoDB 数据库文件备份。
备份文件可能来自文件系统快照。MongoDB Cloud Manager 为存储的快照和时间点快照生成 MongoDB 数据库文件。对于 MongoDB Enterprise Advanced 提供的本地部署解决方案 Ops Manager,另请参阅 Ops Manager 备份概述。
- 加密存储引擎注意事项
- 对于使用
AES256-GCM
加密模式的加密存储引擎,AES256-GCM
要求每个进程使用带有键的唯一计数器区块值。对于使用AES256-GCM
密码配置的加密存储引擎:- 从热备份恢复
- 从 4.2 开始,如果从通过“热”备份(即
mongod
正在运行)获取的文件进行恢复,MongoDB 可以在启动时检测到“脏”密钥,并自动滚动更新数据库密钥以避免重用 IV(初始化向量)。
- 从冷备份恢复
不过,如果从通过“冷”备份(即
mongod
未运行)获取的文件进行恢复,MongoDB 无法在启动时检测到“脏”密钥,重用 IV 将导致机密性和完整性保证失效。从 4.2 版开始,为了避免从冷文件系统快照恢复后重用密钥,MongoDB 添加了一个新的命令行选项
--eseDatabaseKeyRollover
。使用--eseDatabaseKeyRollover
选项启动时,mongod
实例会滚动使用AES256-GCM
密码配置的数据库密钥并退出。
启动新的单节点副本集。
将 mongod
实例作为新的单节点副本集启动。使用 --dbpath
选项指定备份数据文件的路径,并使用 --replSet
选项指定副本集名称。对于配置服务器副本集 (CSRS),请包含 --configsvr
选项。包括适合您部署的任何其他选项。
您还必须指定与创建快照时使用的相同的启动选项。
注意
如果您的副本集成员在不同的主机上运行,或者希望远程客户端连接到实例,则必须指定 net.bindIp
设置(或 --bind_ip
)。
警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
mongod --dbpath /data/db --replSet <replName> <startup options>
注意
所有 MongoDB 集合默认都有 UUID。MongoDB 恢复集合时,恢复的集合保留其原始 UUID。恢复不存在 UUID 的集合时,MongoDB 会为恢复的集合生成一个 UUID。
有关集合 UUID 的更多信息,请参阅集合。
启动新的副本集。
对副本集的一个且仅一个成员使用 rs.initiate()
:
rs.initiate( { _id : <replName>, members: [ { _id : 0, host : <host:port> } ] })
MongoDB 会启动一个由当前成员组成并使用默认副本集配置的集合。
向副本集添加成员
MongoDB 提供了两个用于恢复副本集从节点成员的选项:
手动将数据库文件复制到每个数据目录。
允许初始同步以自动分发数据。
注意
如果数据库很大,初始同步可能需要很长时间才能完成。对于大型数据库,最好将数据库文件复制到每个主机。
复制数据库文件,重新启动 mongod
实例
使用以下操作序列,通过直接复制 MongoDB 数据文件,将还原的数据“填充”副本集的其他成员。
使用初始同步更新辅助成员
使用以下操作序列,使用默认的初始同步操作,将还原的数据作为副本集其他成员的“填充器”。