CentOS 上 MongoDB 数据恢复步骤
一 场景与准备
- 明确备份类型:
- 逻辑备份(由 mongodump 生成,目录或 .archive/.bson 文件,适合跨版本迁移与选择性恢复)。
- 物理备份(拷贝 dbPath 数据文件,适合同版本快速整机恢复)。
- 准备环境:
- 安装与源库版本匹配的 MongoDB 工具链(mongorestore/mongod),避免版本不兼容导致恢复失败。
- 规划目标环境:单节点、副本集或分片,并准备相应目录与权限。
- 建议先对现有数据做快照或拷贝(如 /var/lib/mongo),以便回滚。
二 逻辑备份恢复 mongorestore(通用)
- 基本流程
- 停写与备份当前数据(可选但强烈建议):
- 建议先停止应用写入,必要时对现有 dbPath 做一次拷贝备份。
- 解压备份(若为压缩包):
- tar.gz:tar -xzvf backup_20250401.tar.gz -C /backups/
- .zst:zstd -d -c backup.tar.zst | tar -xvf - -C /backups/
- 恢复命令(示例):
- 全量恢复:mongorestore --uri=“mongodb://127.0.0.1:27017/?authSource=admin” /backups/mongodb_backup_20250401
- 单库:mongorestore --uri=“mongodb://127.0.0.1:27017/?authSource=admin” --db mydb /backups/mongodb_backup_20250401/mydb
- 单表:mongorestore --uri=“mongodb://127.0.0.1:27017/?authSource=admin” --db mydb --collection mycol /backups/mongodb_backup_20250401/mydb/mycol.bson
- 常用参数:
- –drop:恢复前删除同名集合(谨慎使用)。
- –gzip:导入 .gz 归档。
- –archive=:导入 .archive 流。
- –nsExclude=“config.*”:分片场景导入到自建集群时排除 config 库。
- –stopOnError:遇错即停,便于定位问题。
- 验证:
- mongo --host 127.0.0.1 -u -p --authenticationDatabase admin
- show dbs; use mydb; db.mycol.countDocuments({})。
- 常见要点
- 分片集群恢复:将下载的每个 Shard 备份分别导入;导入到自建分片集群时务必加 –nsExclude=“config.*”;多分片导入到同一集群时通常仅第一个导入使用 –drop。
- 版本兼容:旧版 mongorestore 可能不兼容新版本 MongoDB,需选择匹配版本。
- 云盘逻辑备份拆分文件:若单表被拆成多个 bson 分片(如 data 目录下的 part 文件),需先合并或重命名后再导入。
三 物理备份恢复 拷贝 dbPath(同版本快速恢复)
- 基本流程
- 准备干净目录并解压物理备份:
- mkdir -p /test/mongo/data
- tar xzvf backup_20250401.tar.gz -C /test/mongo/data
- 创建配置文件 mongod.conf(示例,WiredTiger):
- systemLog: destination: file; path: /test/mongo/mongod.log; logAppend: true
- security: authorization: enabled
- storage: dbPath: /test/mongo/data; directoryPerDB: true
- net: port: 27017
- processManagement: fork: true; pidFilePath: /test/mongo.pid
- 以单节点模式启动:
- mongod -f /test/mongo/mongod.conf
- 登录验证:
- mongo --host 127.0.0.1 -u -p --authenticationDatabase admin
- show dbs; 检查集合与数据量。
- 如需副本集模式:
- 先以单节点完成恢复并登录;
- 在 local 库移除原副本集配置:use local; db.system.replset.remove({});
- 按规划配置 replSetName、keyFile(权限 600)、启动多个节点后用 rs.initiate() 初始化并添加成员。
- 常见要点
- 物理恢复通常要求 MongoDB 版本一致、存储引擎一致(如 WiredTiger)。
- 若启动报错,检查 data 目录是否被占用、是否残留 storage.bson、日志路径是否可写、keyFile 权限是否为 600。
四 常见问题与排错
- 版本不兼容:恢复工具版本需与目标 MongoDB 版本匹配,必要时升级/降级 mongorestore。
- 导入中断或失败:使用 –stopOnError 定位问题;分片导入到自建集群务必加 –nsExclude=“config.*”。
- 单表多 part bson:需先合并或重命名后再用 mongorestore 导入。
- 物理恢复启动失败:确认 data 目录干净、无残留 mongod 进程、日志路径存在且可写、keyFile 权限 600。