On this page
从 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 实例。
使用--shutdown或db.shutdownServer()确保干净关闭。
将主要数据库的数据目录复制到每个辅助数据库。
将primary's数据目录复制到副本集的其他成员的dbPath中。
启动您还原的 mongod 实例。
将辅助副本添加到副本集。
在连接到primary的mongoShell 程序中,使用rs.add()将secondaries添加到副本集。有关部署副本集的更多信息,请参见部署副本集。
使用初始同步更新辅助文件
使用以下操作序列,使用默认的initial sync操作“种子”具有还原后数据的副本集的其他成员。
确保预期副本集成员上的数据目录为空。
将每个预期成员添加到副本集。
将成员添加到副本集时,Initial Sync将数据从primary复制到新成员。