从快照恢复副本集
当您从备份恢复副本集时, MongoDB Ops Manager会为您提供所选恢复点的恢复文件。 要学习;了解恢复进程,请参阅恢复概述。
Considerations
查看对BinData
BSON子类型的更改
BSON 规范 将 BSON 二进制数据类型 (BinData
) 的默认子类型从2
更改为0
。快照中存储的某些二进制数据可能是BinData
子类型2 。 备份会自动检测BinData
子类型2中的快照数据并将其转换为BinData
子类型0 。 如果应用程序代码需要使用BinData
子类型2 ,则必须更新应用程序代码以处理BinData
子类型0 。
使用以下内容中给出的设置进行恢复: restoreInfo.txt
备份恢复文件包括名为restoreInfo.txt
的元数据文件。 此文件捕获拍摄快照时数据库使用的选项。 恢复后,数据库必须使用列出的选项运行。 此文件包含:
groupName
ReplicaSetName
集群 ID (如果适用)
快照时间戳(作为 UTC 时间戳)
恢复时间戳(作为 UTC 的 BSON 时间戳)
上次应用的oplog (作为 UTC 的BSON时间戳)
MongoDB 版本
storage engine类型
拍摄快照时数据库上使用的mongod 启动选项
加密(仅在对快照启用加密时显示)
主密钥 UUID (仅在对快照启用加密时显示)
如果从加密备份恢复,则必须为此主密钥预配证书。
备份注意事项
所有 FCV数据库必须符合相应的备份注意事项。
先决条件
要执行手动恢复,您必须在 MongoDB Ops Manager中具有 备份管理员 角色。
要从加密备份中恢复,您需要用于加密备份的相同主密钥,以及与备份守护程序主机上相同的证书或从KMIP主机使用该密钥预配的新证书。
如果快照已加密,恢复面板将显示 KMIP 主密钥 ID 和 KMIP 服务器信息。 您还可以在查看快照本身时以及在restoreInfo.txt
文件中找到这些信息。
恢复期间的客户端请求
您必须确保 MongoDB 部署在恢复期间不会收到客户端请求。 您必须:
使用新主机名恢复到新系统,并在新部署运行后重新配置应用程序代码,或者
确保恢复数据时 MongoDB 部署不会收到客户端请求。
恢复快照
自动恢复
要让 Ops Manager 自动恢复快照,请执行以下操作:
单击 Continuous Backup,然后单击 Overview标签页。
选择恢复点。
选择要恢复备份的时间点。
恢复类型说明操作Snapshot允许您选择一个已存储的快照。选择要恢复的现有快照。Point In Time创建一个自定义快照,包括所有操作,直到但不包括所选时间。默认情况下,Oplog 会将数据保存 24 小时。
示例,如果您选择
12:00
,则恢复中的最后一次操作为11:59:59
或更早。重要提示:在FCV 4.0中,您无法执行涵盖最近一次备份重新同步之前任何时间的PIT恢复。 有关导致重新同步的条件,请参阅重新同步备份。 本说明应用用于FCV 4.2或更高版本。
选择Date和Time 。Oplog Timestamp创建自定义快照,其中包括输入的oplog时间戳(含)之前的所有操作。 oplog Timestamp 包含两个字段:
TimestampIncrement作为 32 位序数在该秒内应用的操作顺序。输入oplog Timestamp 和 Increment。
在副本集上运行针对
local.oplog.rs
的查询,以查找所需的时间戳。单击 Next(连接)。
手动恢复
警告
考虑自动恢复
此过程涉及大量步骤。 其中一些步骤会产生严重的安全隐患。 如果您不需要恢复到MongoDB Ops Manager未管理的部署,请考虑使用自动恢复。
检索Atlas 备份快照
单击 Continuous Backup,然后单击 Overview标签页。
选择恢复点。
选择要恢复备份的时间点。
恢复类型说明操作Snapshot允许您选择一个已存储的快照。选择要恢复的现有快照。Point In Time创建一个自定义快照,包括所有操作,直到但不包括所选时间。默认情况下,Oplog 会将数据保存 24 小时。
示例,如果您选择
12:00
,则恢复中的最后一次操作为11:59:59
或更早。重要提示:在FCV 4.0中,您无法执行涵盖最近一次备份重新同步之前任何时间的PIT恢复。 有关导致重新同步的条件,请参阅重新同步备份。 本说明应用用于FCV 4.2或更高版本。
选择Date和Time 。Oplog Timestamp创建自定义快照,其中包括输入的oplog时间戳(含)之前的所有操作。 oplog Timestamp 包含两个字段:
TimestampIncrement作为 32 位序数在该秒内应用的操作顺序。输入oplog Timestamp 和 Increment。
在副本集上运行针对
local.oplog.rs
的查询,以查找所需的时间戳。单击 Next(连接)。
配置快照下载。
配置以下下载选项:
Pull Restore Usage Limit选择链接的使用次数。 如果您选择No Limit
,则该链接可重复使用,直到过期。Restore Link Expiration (in hours)选择链接过期前的小时数。 默认值为1
。 最大值是所选快照过期前的小时数。单击 Finalize Request(连接)。
如果您使用2FA , MongoDB Ops Manager会提示您输入 2FA 代码。 输入您的2 FA 代码,然后单击Finalize Request 。
Retrieve the Snapshots.
MongoDB Ops Manager创建指向快照的链接。 默认,这些链接的有效期为一小时,并且只能使用一次。
要下载快照,请执行以下操作:
如果您关闭了恢复面板,请单击Continuous Backup ,然后单击Restore History 。
恢复作业完成后,单击显示的每个副本集的(get link) 。
单击:
点击链接右侧的“复制”按钮,可复制链接以供日后使用,或
Download 立即下载快照。
准备副本集
取消管理目标副本集。
在尝试手动恢复数据之前,请从自动化删除副本集。
选择Unmanage this item in Ops Managers but continue to monitor选项。
停止目标副本集。
根据您的路径,您可能需要指定mongosh
的路径。 运行:
mongosh --port <port> \ --eval "db.getSiblingDB('admin').shutdownServer()"
验证目标副本集的硬件和软件要求。
存储容量: | 目标主机的硬件需要有足够的可用存储空间来存储恢复的数据。 如果要保留此托管上的任何现有集群数据,请确保该托管有足够的可用空间用于集群数据和恢复的数据。 |
MongoDB 版本 | 要恢复的目标托管和要恢复的源托管必须运行相同的MongoDB Server版本。 要检查MongoDB版本,请从终端或shell运行 mongod
--version 。 |
要学习;了解更多信息,请参阅安装。
初始化和配置实例
在临时端口上启动临时独立实例。
作为临时措施,以独立运行模式启动mongod
进程。 这允许您在后续步骤中向system.replset
集合添加新的配置参数。
在此过程中提到<ephemeralPort>
的所有步骤中,请使用用于临时独立运行mongod
进程的 。 此端口必须不同于源主机端口和目标托管端口。
运行mongod
进程,如下所示。 根据路径,您可能需要指定mongod
二进制文件的路径。
mongod --dbpath </path/to/datafiles> \ --port <ephemeralPort> \
如果要从经过命名空间筛选的快照恢复,请使用--restore
选项。
mongod --dbpath </path/to/datafiles> \ --port <ephemeralPort> \ --restore
在mongod
进程开始接受连接后,继续。
从local
数据库中删除与副本集相关的集合。
要执行手动恢复,您必须在 MongoDB Ops Manager中具有 备份管理员 角色。
运行以下命令,删除以前的副本集配置和其他非 oplog、与复制相关的集合。
db.getSiblingDB("local").replset.minvalid.drop() db.getSiblingDB("local").replset.oplogTruncateAfterPoint.drop() db.getSiblingDB("local").replset.election.drop() db.getSiblingDB("local").system.replset.remove({})
成功的响应应如下所示:
> db.getSiblingDB("local").replset.minvalid.drop() true > db.getSiblingDB("local").replset.oplogTruncateAfterPoint.drop() true > db.getSiblingDB("local").replset.election.drop() true > db.getSiblingDB("local").system.replset.remove({}) WriteResult({ "nRemoved" : 1 })
添加新的副本集配置。
将以下文档插入local
数据库的system.replset
集合中。 更改以下变量:
<replaceMeWithTheReplicaSetName>
为副本集的名称。 此名称不必与旧名称相同。<host>
为该副本集成员提供服务的托管。<finalPortNewReplicaSet>
到新副本集的最终端口。 对于自动恢复,您必须指定与之前指定的<ephemeralPort>
不同的端口。
确保在members
大量中包含并配置新副本集的所有节点。
1 db.getSiblingDB("local").system.replset.insertOne({ 2 "_id" : "<replaceMeWithTheReplicaSetName>", 3 "version" : NumberInt(1), 4 "protocolVersion" : NumberInt(1), 5 "members" : [ 6 { 7 "_id" : NumberInt(0), 8 "host" : "<host>:<finalPortNewReplicaSet>" 9 }, 10 { 11 . . . 12 }, 13 . . . 14 ], 15 "settings" : { 16 17 } 18 })
成功的响应应如下所示:
{ "acknowledged" : true, "insertedId" : "<yourReplicaSetName>" }
将恢复点设置为Restore Timestamp
中restoreInfo.txt
中的值。
将oplogTruncateAfterPoint
文档设置为restoreInfo.txt文件的Restore Timestamp
字段中提供的值。
该文件中的Restore Timestamp
字段包含两个值。 在以下示例中,第一个值是时间戳,第二个值是增量。
1 ... 2 Restore timestamp: (1609947369, 2) 3 Last Oplog Applied: Wed Jan 06 15:36:09 GMT 2021 (1609947369, 1) 4 MongoDB Version: 4.2.11 5 ...
以下示例代码使用上一示例中的时间戳值和增量值。
truncateAfterPoint = Timestamp(1609947369,2) db.getSiblingDB("local").replset.oplogTruncateAfterPoint.insertOne({ "_id": "oplogTruncateAfterPoint", "oplogTruncateAfterPoint": truncateAfterPoint })
成功的响应应如下所示:
WriteResult({ "nInserted" : 1 })
注意
恢复MongoDB 4.2 使用MongoDB 4.4的Atlas 备份快照
如果您尝试使用运行MongoDB 4.4的mongod
恢复MongoDB 4.2快照,则您的oplog可能包含不需要的文档。
要解决此问题,您可以执行以下任一操作:
将时间戳递减1 。
使用MongoDB 4.2进行恢复。
MongoDB Ops Manager运行自动恢复。
此问题应用用于MongoDB 4.4或更高版本的快照。
管理实例
恢复时间点Atlas 备份快照
(仅限时点恢复)运行MongoDB备份恢复实用程序。
此步骤是有条件的。 如果需要时点恢复,请运行它。
在此步骤中,您将在副本集的目标实例上下载并运行MongoDB备份恢复实用工具,然后停止该实例。
将MongoDB备份恢复实用工具下载到您的托管。
如果您关闭了恢复面板,请单击Continuous Backup in Deployment 、 More ,然后单击Download MongoDB Backup Restore Utility 。
使用提取的快照目录作为数据目录,在未启用身份验证的情况下启动
mongod
实例。 根据路径,您可能需要指定mongod
二进制文件的路径。mongod --port <ephemeralPort> \ --dbpath </path/to/datafiles> \ --setParameter ttlMonitorEnabled=false \ --bind_ip <hostname_or_IP> 警告
MongoDB备份恢复实用工具不支持身份验证,因此您无法通过身份验证启动此临时数据库。
在目标托管上运行MongoDB备份恢复实用程序。 为副本集运行一次。
重要
预配置的 mongodb-backup-restore-util 命令
MongoDB Ops Manager在 Run Binary with PIT Options 下的恢复面板上为
mongodb-backup-restore-util
提供适当的恢复选项。您应复制MongoDB Ops Manager应用程序中提供的
mongodb-backup-restore-util
命令。./mongodb-backup-restore-util --https --host <targetHost> \ --port <ephemeralPort> \ --opStart <opLogStartTimeStamp> \ --opEnd <opLogEndTimeStamp> \ --logFile <logPath> \ --oplogSourceAddr <oplogSourceAddr> \ --apiKey <apiKey> \ --groupId <groupId> \ --rsId <rsId> \ --whitelist <database1.collection1, database2, etc.> \ --blacklist <database1.collection1, database2, etc.> \ --seedReplSetMember \ --oplogSizeMB <size> \ --seedTargetPort <port> \ --ssl \ --sslCAFile </path/to/ca.pem> \ --sslPEMKeyFile </path/to/pemkey.pem> --sslClientCertificateSubject <distinguishedName> \ --sslRequireValidServerCertificates <true|false> \ --sslServerClientCertificate </path/to/client.pem> \ --sslServerClientCertificatePassword <password> \ --sslRequireValidMMSBackupServerCertificate <true|false> \ --sslTrustedMMSBackupServerCertificate </path/to/mms-certs.pem> \ --httpProxy <proxyURL> mongodb-backup-restore-util
命令使用以下选项:选项必要性说明--host
必需--port
必需--opStart
必需--opEnd
必需提供要包含在恢复中的最后一个 oplog 条目的 BSON时间戳 。
此值不能大于oplog的末尾。
--logFile
Optional提供写入MBRU日志的路径(包括文件名)。--oplogSourceAddr
必需提供URL MongoDB Ops Manager资源端点的 。--apiKey
必需提供MongoDB Ops Manager代理API密钥。--groupId
必需提供群组ID。--rsId
必需提供副本集ID。--whitelist
Optional提供要限制恢复的数据库和/或集合的列表。--blacklist
Optional提供要从恢复中排除的数据库和/或集合的列表。--seedReplSetMember
Optional如果您需要副本集成员来重新创建oplog集合并使用正确的时间戳作为种子,则使用。
需要
--oplogSizeMB
和--seedTargetPort
。--oplogSizeMB
可选的提供oplog大小(以 MB 为单位)。
如果设立了
--seedReplSetMember
,则为必填项。--seedTargetPort
可选的提供副本集主节点 (primary node in the replica set)节点的端口。 这可能与 临时端口 不同 使用。
如果设立了
--seedReplSetMember
,则为必填项。--ssl
Optional--sslCAFile
可选的提供证书颁发机构文件的路径。
如果设立了
--ssl
,则为必填项。--sslPEMKeyFile
可选的提供PEM证书文件的路径。
如果设立了
--ssl
,则为必填项。--sslPEMKeyFilePwd
可选的提供
--sslPEMKeyFile
中指定的PEM证书文件的密码。如果设立了
--ssl
并且该PEM密钥文件已加密,则为必填项。--sslClientCertificateSubject
Optional提供目标MongoDB进程的客户端证书主题或标识名 (DN)。
如果设立了
--ssl
,则为必填项。--sslRequireValidServerCertificates
Optional设置一个标志,指示该工具是否应验证目标MongoDB进程提供的证书。--sslServerClientCertificate
Optional提供客户端证书文件的绝对路径,用于连接到MongoDB Ops Manager托管。--sslServerClientCertificatePassword
可选的提供客户端证书文件密码的绝对路径,用于连接到MongoDB Ops Manager托管。
如果设立了
--sslServerClientCertificate
并且该证书已加密,则为必填项。--sslRequireValidMMSBackupServerCertificate
Optional设置一个标志,指示在联系MongoDB Ops Manager托管时是否需要有效证书。 默认值为true
。--sslTrustedMMSBackupServerCertificate
Optional为MongoDB Ops Manager 托管提供 PEM 格式的受信任证书颁发机构证书的绝对路径。如果未提供此标志,则使用系统证书颁发机构。
如果MongoDB Ops Manager使用自签名SSL证书,则需要此设置。
--httpProxy
Optional提供该工具可以使用的 HTTP 代理服务器的 URL 。表示如果您复制了MongoDB Ops Manager应用程序中提供的
mongodb-backup-restore-util
命令,则此字段已预先配置。停止实例上的
mongod
。 根据您的路径,您可能需要指定mongosh
的路径。 运行:mongosh --port <ephemeralPort> \ --eval "db.getSiblingDB('admin').shutdownServer()"
(仅限时点恢复)重新启动实例以恢复oplog 。
使用以下命令启动mongod
,并指定以下参数:
<bind_ip>
为您在副本集配置中指定的该副本集成员提供服务的主机。<port>
到您在启动临时独立运行运行实例时指定的 <ephemeralPort>。
此操作会重放 oplog 到最新条目,包括运行 MongoDB 备份恢复实用工具时插入的条目。
mongod --dbpath </path/to/datafiles> \ --port <ephemeralPort> \ --bind_ip <host-serving-this-replica-set-member> --setParameter recoverFromOplogAsStandalone=true --setParameter takeUnstableCheckpointOnShutdown=true --setParameter startupRecoveryForRestore=true
完成此步骤后,实际恢复进程即完成。
(仅限时点恢复)停止独立实例。
根据您的路径,您可能需要指定mongosh
的路径。 运行:
mongosh --port <port> \ --eval "db.getSiblingDB('admin').shutdownServer()"
恢复自动化
重新启动副本集中的所有节点。
点,副本集的数据文件处于一致状态,但需要更新副本集配置,以便每个节点相互了解。
运行以下命令:
sudo -u mongod <path/to/target_mongod_binary> -f /path/to/datafiles/automation-mongod.conf
以下示例将重新启动版本为4.4.12的所有节点 具有数据路径/data6/node3
的企业 :
sudo -u mongod /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.12-ent/bin/mongod -f /data6/node3/automation-mongod.conf
重新导入副本集。
要再次自动化管理副本集,请将副本集重新导入MongoDB Ops Manager中。
在Deployment页面上,单击Add ,选择Existing MongoDB Deployment ,然后继续将Automation添加回集群。