MongoDB恢复数据步骤
一、先确定恢复目标与方式
- 明确恢复范围:是恢复整个实例、部分数据库/集合,还是少量Key。
- 明确恢复位置:恢复到云数据库MongoDB新实例,还是自建MongoDB(单节点/副本集/分片集群)。
- 明确恢复粒度:是否需要按时间点恢复(PITR),或仅需最近一次备份。
| 目标位置 |
可用方案 |
关键前提 |
适用场景 |
| 云数据库MongoDB新实例 |
从备份点新建实例;按时间点新建实例;恢复单个/多个数据库;跨地域恢复 |
新实例大版本需与原实例相同;存储空间需≥原实例;部分能力仅对云盘版开放 |
误删集合/文档、回滚到某时间点、跨地域容灾 |
| 自建数据库 |
逻辑备份恢复(mongorestore);物理备份恢复(文件拷贝+起实例) |
逻辑:旧版mongorestore需与实例版本兼容;物理:副本集、未开启TDE、存储引擎为WiredTiger/RocksDB |
自建环境迁移/恢复、云上备份落地到机房 |
| 原实例快速回档少量数据 |
按Key闪回(MongoDB 5.0+、云盘版) |
需提前开启闪回备份,生效后约10分钟可用 |
少量数据错乱/误删,快速回档到指定时间点 |
| 以上能力、限制与前提以云数据库MongoDB官方能力为准。 |
|
|
|
二、恢复到云数据库MongoDB实例
- 恢复到新实例(备份点/时间点)
- 在控制台选择目标备份,执行从备份点新建实例或按时间点新建实例;选择目标地域/可用区与实例规格。注意:新实例大版本必须与原实例一致,存储空间需≥原实例;新建实例默认为最新内核小版本。若需跨地域恢复,在支持的范围内选择备份所在地域创建新实例。
- 恢复到原实例(库表级)
- 对于分片集群云盘版,可用库表恢复功能将数据恢复至原实例;其他实例类型可先恢复到新实例,再通过修改连接地址/端口或DTS迁移回写原实例。
- 重要限制
- 已下载的备份文件不支持直接恢复到云数据库实例;需先恢复到自建库,再通过DTS迁入云实例。
- 若升级过数据库大版本,旧版本备份无法恢复到新版本实例。
三、恢复到自建MongoDB
- 逻辑备份恢复(mongorestore)
- 适用:从云数据库下载的逻辑备份或自建库导出的mongodump数据。
- 步骤:
- 准备环境:安装与备份源版本兼容的MongoDB;确保目标库干净(如需覆盖,先做好备份)。
- 可选解压:若备份为压缩包,先解压到目录(如/backup/dump)。
- 执行恢复:mongorestore --host --port --username --password --authenticationDatabase admin <备份目录>/dump
- 常用参数:–drop(恢复前删除同名集合)、–gzip(导入压缩备份)、–nsInclude/–nsExclude(按库/集合过滤)。
- 校验:登录Mongo Shell,使用show dbs、db..count()等核对数据量与样本记录。
- 物理备份恢复(文件级拷贝)
- 适用:云数据库MongoDB物理备份或自建副本集的文件系统拷贝。
- 前提:实例为副本集、未开启TDE、存储引擎为WiredTiger/RocksDB;自建库版本需与备份源匹配。
- 步骤(概要):
- 准备实例:安装对应版本的MongoDB(RocksDB需自行编译带RocksDB引擎版本)。
- 解压备份:
- .tar.gz 格式:tar xzvf .tar.gz
- _qp.xb 格式(Linux):先用xbstream解包,再用Percona XtraBackup解压(–decompress --remove-original)。
- 放置数据:将解压后的数据文件放到目标dbPath(如/test/mongo/data)。
- 启动为单节点(示例配置要点):
- storage.dbPath、systemLog.path、net.port、security.authorization: enabled
- 启动命令:mongod -f /path/mongod.conf
- 如需以副本集模式启动:先以单节点启动,登录Mongo Shell,清理原实例的副本集配置后再rs.initiate()重建。
- 校验:登录Mongo Shell,执行show dbs、检查集合与索引。
四、按时间点恢复 PITR(自建副本集)
- 前提:源库为副本集(可访问local.oplog.rs),备份时包含oplog(mongodump 加 --oplog)。
- 步骤:
- 准备基础备份:mongodump -u -p --authenticationDatabase admin --oplog -o <backup_dir>
- 定位时间点:在源库查询oplog,找到误操作前的ts(如drop/remove的时间戳)。
- 导出增量oplog:仅导出基础备份时间与误操作时间之间的oplog片段
- mongodump -d local -c oplog.rs -q ‘{ts:{$gt:<base_ts>,$lt:<fault_ts>}}’ -o <oplog_dir>
- 恢复到临时实例:将基础备份恢复到临时实例(端口如27018),并用oplog回放至目标时间点
- mongorestore --port 27018 --oplogReplay <backup_dir>
- 如需精确截断,可使用–oplogLimit 或在导出oplog时用$lt限定。
- 校验与切换:在临时实例核对数据,确认无误后将临时实例提升为主,或反向同步回生产。
- 说明:MongoDB oplog具备幂等性,重放多次结果一致,便于PITR操作。
五、按Key闪回少量数据(云数据库MongoDB 5.0+)
- 适用:副本集/分片集群、云盘版、MongoDB 5.0及以上;用于少量数据错乱或误删的快速回档。
- 步骤:
- 开启闪回备份:在控制台开启,需等待约10分钟生效;闪回数据保留1~7天(可配置)。
- 发起闪回任务:选择目标表、恢复时间点、按索引键(默认**_id或自定义索引)填写要恢复的Key;支持多组主键用分号(;)分隔(OR),组内条件用逗号(,)**分隔(AND),特殊字符需转义。
- 预览与恢复:预览勾选记录,先落到临时表;确认后执行恢复至原表(会覆盖原表对应行)。单次闪回最多1000行。
- 影响与限制:对实例性能有一定影响(TPS最高可能下降约3%);仅支持UPDATE/DELETE回滚,不支持INSERT回滚与DDL;索引类型与长度等有限制。