文档菜单
文档首页
/
MongoDB 手册
/ / /

从 MongoDB 备份中恢复自管理复制集

本页内容

  • 将数据库恢复到单个节点复制集
  • 向复制集添加成员

此过程概述了将 MongoDB 数据恢复到新复制集的过程。使用此方法从生产备份中初始化测试部署或作为灾难恢复的一部分。

重要

您还可以使用mongorestore 使用由 mongodump 创建的数据恢复数据库文件。有关更多信息,请参阅 使用 MongoDB 工具备份和恢复自管理部署

1

备份文件可能来自一个文件系统快照。MongoDB云管理器(MongoDB Cloud Manager)为存储的快照时间点快照生成MongoDB数据库文件。对于Ops Manager,MongoDB Enterprise Advanced提供的本地解决方案,请参阅Ops Manager备份概述

加密存储引擎的注意事项
对于使用AES256-GCM加密模式的加密存储引擎AES256-GCM要求每个进程使用与密钥唯一对应的计数器块值。对于配置了AES256-GCM密码的加密存储引擎
  • 从热备份中恢复
    从4.2版本开始,如果您从通过“热”备份(即mongod正在运行)获取的文件中恢复,MongoDB可以在启动时检测到“脏”密钥,并自动将数据库密钥滚动以避免IV(初始化向量)的重用。
  • 从冷备份中恢复

    然而,如果您从通过“冷”备份(即mongod未运行)获取的文件中恢复,MongoDB无法在启动时检测到“脏”密钥,IV的重用会破坏机密性和完整性保证。

    从4.2版本开始,为了避免从冷文件系统快照恢复后密钥的重用,MongoDB增加了一个新的命令行选项--eseDatabaseKeyRollover。当使用--eseDatabaseKeyRollover选项启动时,mongod实例将滚动配置了AES256-GCM密码的数据库密钥并退出。

2

如果您是从文件系统备份(或包含本地数据库的任何备份)中进行恢复,则删除本地数据库。

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

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

mongosh连接到mongod实例,并删除本地数据库。

use local
db.dropDatabase()

关闭独立实例。

3

以新的单节点副本集启动 mongod 实例。使用 --dbpath 选项指定备份数据文件的路径,并使用 --replSet 选项指定副本集名称。对于 配置服务器副本集 (CSRS),包含 --configsvr 选项。根据您的部署情况包含其他任何合适的选项。

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

注意

如果您的副本集成员在不同的主机上运行,或者您希望远程客户端连接到您的实例,您必须指定 net.bindIp 设置(或 --bind_ip)。

警告

在将您的实例绑定到公共可访问的IP地址之前,您必须保护您的集群免受未经授权的访问。有关安全建议的完整列表,请参阅 自托管部署的安全清单。至少,考虑 启用身份验证强化网络基础设施

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

注意

所有 MongoDB 集合默认都有UUIDs。当 MongoDB 恢复集合时,恢复的集合保留其原始 UUIDs。在恢复没有 UUID 的集合时,MongoDB 为恢复的集合生成一个 UUID。

有关集合 UUID 的更多信息,请参阅 集合

4

从运行着mongod的一个实例的同一台机器上(在本教程中为 mongodb0.example.net),启动mongosh。要连接到监听默认端口27017的本地的mongod,只需执行

mongosh

根据您的路径,您可能需要指定mongosh二进制文件的路径。

如果您的mongod没有在默认端口上运行,为--port指定mongosh选项。

5

在副本集的单个成员上使用rs.initiate()

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

MongoDB将初始化一个包含当前成员并使用默认副本集配置的集合。

MongoDB提供了两种恢复副本集次要成员的方法

注意

如果你的数据库很大,初次同步可能需要很长时间才能完成。对于大型数据库,将数据库文件复制到每个主机上可能更可取。

使用以下操作序列通过直接复制 MongoDB 数据文件,使用恢复的数据“种植”副本集的额外成员。

1

使用 --shutdowndb.shutdownServer() 确保干净地关闭。

2

将主数据目录复制到副本集其他成员的主节点dbPath

3
4

在连接到主节点mongosh会话中,使用副本rs.add()方法将副本添加到副本集中。有关部署副本集的更多信息,请参阅部署自托管副本集

使用以下操作序列使用默认的初始同步操作将恢复的数据“播种”到副本集的其他成员。

1

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

2
3

使用 主节点mongo 命令行工具,并使用 rs.add() 添加每个从节点到副本集。

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

返回

使用 MongoDB 工具