对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

从 MongoDB 备份恢复自管理副本集

此程序概述了获取 MongoDB 数据并将此数据恢复到新副本集的过程。使用此方法从生产备份进行数据库填充测试部署,或作为灾难恢复的一部分。

重要

无法将单个数据集恢复为三个新的 mongod 实例,然后创建副本集。如果您将数据集复制到每个 mongod 实例,然后创建副本集,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.

备份提供数据库当前状态的快照。从备份中恢复时,恢复的数据库不包括备份后所做的任何更改,这可能会导致数据丢失。

1

备份文件可能来自文件系统快照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 密码配置的数据库密钥并退出。

2

如果您要从文件系统备份(或任何带有 local 数据库的备份)进行恢复,请删除 local 数据库。

您还必须指定与创建快照时使用的相同的启动选项

mongod --dbpath /data/db <startup options>

Connect mongosh to the mongod instance and drop the local database.

use local
db.dropDatabase()

关闭独立运行。

3

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 的更多信息,请参阅集合。

4

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.

5

对副本集的一个且仅一个成员使用 rs.initiate()

rs.initiate( {
_id : <replName>,
members: [ { _id : 0, host : <host:port> } ]
})

MongoDB 会启动一个由当前成员组成并使用默认副本集配置的集合。

MongoDB 提供了两个用于恢复副本集从节点成员的选项:

注意

如果数据库很大,初始同步可能需要很长时间才能完成。对于大型数据库,最好将数据库文件复制到每个主机。

使用以下操作序列,通过直接复制 MongoDB 数据文件,将还原的数据“填充”副本集的其他成员。

1

使用 --shutdowndb.shutdownServer() 确保完全关闭。

2

主成员的数据目录复制到副本集其他成员的 dbPath 中。

3
4

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.

使用以下操作序列,使用默认的初始同步操作,将还原的数据作为副本集其他成员的“填充器”。

1

例如,如果副本集成员具有 /data/dbstorage.dbPath--dbpath,则必须确保该目录存在为空。

2
3

使用 mongo shell 连接到主成员,并使用 rs.add() 将每个辅助成员添加到副本集。

在您将成员添加到副本集时,初始同步会将数据从主成员复制到新成员。