从 MongoDB 备份还原副本集

在本页面

此过程概述了获取 MongoDB 数据并将其恢复到新的replica set的过程。使用此方法从生产备份中为测试部署提供种子,或作为灾难恢复的一部分。

Important

无法将单个数据集还原到三个新的mongod实例,然后**然后创建副本集。如果将数据集复制到每个mongod实例,然后创建副本集,则 MongoDB 将强制辅助数据库执行initial sync。本文档中的过程描述了部署还原的副本集的正确有效的方法。

您还可以使用mongorestore来恢复使用mongodump创建的数据的数据库文件。有关更多信息,请参见使用 MongoDB 工具备份和还原

将数据库还原到单节点副本集中

获取备份的 MongoDB 数据库文件。

备份文件可能来自文件系统快照MongoDB 云 Management 器产生stored snapshots时间点快照的 MongoDB 数据库文件。对于Ops Manager,MongoDB Enterprise Advanced 中提供的本地解决方案,另请参见Ops Manager 备份概述

如果备份中存在本地数据库,则将其删除。

如果要从文件系统备份(或具有本地数据库的任何备份)中还原,请删除local数据库。

使用备份中的数据文件作为数据路径启动一个独立的 mongod。

mongod --dbpath /data/db

删除本地数据库。

mongo shell 连接到mongod实例,并删除local数据库。

use local
db.dropDatabase()

关闭独立服务器。

启动新的单节点副本集。

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

Note

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

Warning

绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication加强网络基础设施

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

Note

  • 3.6 版的新功能:*

默认情况下,所有 MongoDB 集合都具有 UUID。当 MongoDB 还原集合时,还原的集合将保留其原始 UUID。还原不存在 UUID 的集合时,MongoDB 会为还原的集合生成一个 UUID。

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

将 mongo shell 连接到 mongod 实例。

从运行mongod的同一台计算机(在本教程中为mongodb0.example.net)中,启动mongo Shell。要连接mongod并在27017的默认端口上监听 localhost,只需发出:

mongo

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

启动新的副本集。

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

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

MongoDB 将启动一个包含当前成员的集合,并使用默认副本集配置。

将成员添加到副本集中

MongoDB 提供了两个选项来还原副本集的辅助成员:

Note

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

复制数据库文件并重新启动 mongod 实例

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

关闭您还原的 mongod 实例。

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

将主要数据库的数据目录复制到每个辅助数据库。

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

启动您还原的 mongod 实例。

将辅助副本添加到副本集。

在连接到primarymongoShell 程序中,使用rs.add()secondaries添加到副本集。有关部署副本集的更多信息,请参见部署副本集

使用初始同步更新辅助文件

使用以下操作序列,使用默认的initial sync操作“种子”具有还原后数据的副本集的其他成员。

确保预期副本集成员上的数据目录为空。

将每个预期成员添加到副本集。

将成员添加到副本集时,Initial Sync将数据从primary复制到新成员。