此程序概述了获取 MongoDB 数据并将此数据恢复到新副本集的过程。使用此方法从生产备份进行数据库填充测试部署,或作为灾难恢复的一部分。
重要
You can also use mongorestore to restore database files using data created with mongodump. See Back Up and Restore with MongoDB Tools for more information.
Considerations
备份提供数据库当前状态的快照。从备份中恢复时,恢复的数据库不包括备份后所做的任何更改,这可能会导致数据丢失。
将数据库恢复到单节点副本集
获取 MongoDB 数据库文件备份。
备份文件可能来自文件系统快照。MongoDB Cloud Manager 会为存储的快照和时间点快照生成 MongoDB 数据库文件。对于 MongoDB Enterprise Advanced 中提供的本地解决方案 Ops Manager,另请参阅 Ops Manager 备份概述。
- 加密存储引擎注意事项
对于使用
AES256-GCM加密模式的加密存储引擎,AES256-GCM要求每个进程使用带有密钥的唯一计数器块值。对于使用
AES256-GCM密码配置的加密存储引擎:- 从热备份恢复
- 如果在
mongod运行时从通过“热”备份获取的文件恢复, MongoDB会在初创企业时检测到“脏”键,并自动滚动数据库键以避免重复使用 IV(初始化向量)。
- 从冷备份恢复
但是,如果在
mongod未运行时从通过“冷”备份获取的文件恢复, MongoDB在初创企业时不会检测到“脏”密钥,并且重复使用 IV 会导致机密性和完整性ACID 一致性保证失效。为了避免从冷文件系统快照恢复后重复使用密钥, 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 的更多信息,请参阅集合。
Connect mongosh to the mongod instance.
From the same machine where one of the mongod is running (in this tutorial, mongodb0.example.net), start mongosh. To connect to the mongod listening to localhost on the default port of 27017, simply issue:
mongosh
Depending on your path, you may need to specify the path to the mongosh binary.
If your mongod is not running on the default port, specify the --port option for mongosh.
启动新的副本集。
对副本集的一个且仅一个成员使用 rs.initiate():
rs.initiate( { _id : <replName>, members: [ { _id : 0, host : <host:port> } ] })
MongoDB 会启动一个由当前成员组成并使用默认副本集配置的集合。
向副本集添加成员
MongoDB 提供了两个用于恢复副本集从节点成员的选项:
手动将数据库文件复制到每个数据目录。
允许初始同步以自动分发数据。
注意
如果数据库很大,初始同步可能需要很长时间才能完成。对于大型数据库,最好将数据库文件复制到每个主机。
复制数据库文件,重新启动 mongod 实例
使用以下操作序列,通过直接复制 MongoDB 数据文件,将还原的数据“填充”副本集的其他成员。
关闭已恢复的 mongod 实例。
使用 --shutdown 或 db.shutdownServer() 确保完全关闭。
启动已恢复的 mongod 实例。
将辅助成员添加到副本集。
In a mongosh session that is connected to the primary, add the secondaries to the replica set using the rs.add() method. See Deploy a Self-Managed Replica Set for more information about deploying a replica set.
使用初始同步更新辅助成员
使用以下操作序列,使用默认的初始同步操作,将还原的数据作为副本集其他成员的“填充器”。