从 MongoDB 备份恢复自管理副本集
此程序概述了获取 MongoDB 数据并将此数据恢复到新副本集的过程。使用此方法从生产备份进行数据库填充测试部署,或作为灾难恢复的一部分。
重要
您还可以使用 mongorestore
,通过 mongodump
创建的数据来恢复数据库文件。有关更多信息,请参阅使用 MongoDB 工具备份和恢复自管理部署。
Considerations
备份提供数据库当前状态的快照。从备份中恢复时,恢复的数据库不包括备份后所做的任何更改,这可能会导致数据丢失。
将数据库恢复到单节点副本集
获取 MongoDB 数据库文件备份。
备份文件可能来自文件系统快照。MongoDB Cloud Manager 会为存储的快照和时间点快照生成 MongoDB 数据库文件。对于 MongoDB Enterprise Advanced 中提供的本地解决方案 Ops Manager,另请参阅 Ops Manager 备份概述。
- 加密存储引擎注意事项
- 对于使用
加密模式的加密存储引擎
,
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 数据文件,将还原的数据“填充”副本集的其他成员。
使用初始同步更新辅助成员
使用以下操作序列,使用默认的初始同步操作,将还原的数据作为副本集其他成员的“填充器”。