在 Ubuntu 上恢复 MongoDB 数据的常用方法
一、准备与版本匹配
- 确认 MongoDB 服务状态:建议恢复前先停止服务,避免写入冲突(可选)。命令:sudo systemctl stop mongod。恢复完成后再启动:sudo systemctl start mongod。如使用副本集/分片,请按实际架构调整步骤。
- 工具与版本:使用与备份来源一致或兼容的 mongorestore 版本;旧版本 mongorestore 可能无法兼容新版本 MongoDB。
- 备份类型:优先使用 mongodump 生成的二进制备份(含索引与数据类型保真),不建议用 mongoexport/mongoimport 的 JSON/CSV 做灾备恢复(存在类型保真损失)。
二、使用 mongorestore 恢复(逻辑备份,最常用)
- 基本用法(指定库)
将备份目录中的某个库恢复到目标库(同名或不同名均可):
mongorestore --db targetDB /path/to/backup/targetDB
示例:mongorestore --db myDatabase /backups/myDatabase
- 覆盖写入更安全
在恢复前先删除同名集合,避免重复数据:
mongorestore --db newdb --drop /var/backups/mongobackups/01-20-16/newdb/
- 从归档文件恢复
适用于 .gz 或 .zst 归档(mongodump 的 archive 选项生成):
mongorestore -h 127.0.0.1 --port 27017 -u root -p ‘password’ --drop --gzip --archive=backup.gz -vvvv --stopOnError
如为 .zst:先解压(示例:zstd -d -c backup.tar.zst | tar -xvf - -C /restore/dir),再用 mongorestore 指向解压目录。
- 分片集群要点
目标为分片集群时,连接地址填 mongos(如 -h mongos-host:27017);恢复多个分片备份到同一集群时,仅第一个分片使用 –drop;必要时添加 –nsExclude=“config.*” 避免冲突。
- 单表恢复
mongorestore --uri=‘mongodb://127.0.0.1:27017/?authSource=admin’ --db testDB --collection coll1 ./testDB/coll1.bson。
三、物理备份恢复(WiredTiger/RocksDB 数据目录级恢复)
- 适用场景:从云数据库或自建环境的物理备份(文件后缀 .tar.gz 或 _qp.xb)恢复至本地 单节点/副本集。
- 基本步骤:
- 安装与备份同版本的 MongoDB;
- 解压备份:
- .tar.gz:tar xzvf file.tar.gz
- _qp.xb:先安装 percona-xtrabackup 与 qpress,再执行
cat file_qp.xb | xbstream -x -v
innobackupex --decompress --remove-original /data/dir
- 准备配置文件 mongod.conf(示例,WiredTiger):
systemLog: { destination: file, path: /test/mongo/mongod.log, logAppend: true }
storage: { dbPath: /test/mongo/data, directoryPerDB: true }
net: { port: 27017 }
security: { authorization: enabled }
processManagement: { fork: true, pidFilePath: /test/mongo.pid }
- 启动单节点:mongod -f /test/mongo/mongod.conf;如需副本集,先清理原实例的副本集配置再 rs.initiate()。
- 登录验证:mongo --host 127.0.0.1 -u root -p ‘password’ --authenticationDatabase admin。
四、验证与常见问题
- 验证数据:
- 登录 Mongo Shell:mongo --host 127.0.0.1 -u root -p ‘password’ --authenticationDatabase admin
- 查看库表:show dbs;use yourDB;db.yourCollection.find().limit(10)
- 常见问题与处理:
- 版本不兼容:升级 mongorestore 至与实例匹配的版本。
- 分片恢复报错:连接 mongos;必要时使用 –nsExclude=“config.*”;多分片导入仅首库用 –drop。
- 物理恢复启动失败:检查 dbPath 是否残留 storage.bson 或已有 mongod 进程占用;副本集需确保 keyFile 权限为 600。
- 归档恢复失败:确认 –gzip 与文件后缀一致;.zst 需先解压;必要时使用 –stopOnError 定位问题。