在 Ubuntu 上恢复 MongoDB 数据的常用方法
一、准备与版本匹配
- 确认 MongoDB 服务已安装并运行:sudo systemctl status mongod。如未运行,先安装并启动对应版本。
- 恢复工具的版本应与备份来源尽量一致(特别是 4.x 系列),以避免兼容性问题。
- 备份方式通常有两类:
- 逻辑备份:使用 mongodump 生成的 BSON 文件(含数据与索引元数据),便于跨版本、跨平台恢复。
- 物理备份:直接拷贝 dbPath 数据文件(WiredTiger/RocksDB 等),要求版本严格匹配、操作步骤更谨慎。
- 建议在恢复前停止写入或切换到维护窗口,避免恢复过程产生写入冲突。
二、使用 mongorestore 恢复逻辑备份(最常用)
- 基本用法
- 恢复整个备份目录到本机同名数据库:
mongorestore /path/to/backup/
- 恢复到指定数据库(避免覆盖同名库的其他集合):
mongorestore --db <目标库名> /path/to/backup/<备份库名>
- 恢复单个集合:
mongorestore --db <目标库名> --collection <集合名> /path/to/backup/<备份库名>/<集合名>.bson
- 常用选项
- –drop:恢复前删除目标集合,确保与备份一致(生产慎用)。
- –nsInclude/–nsExclude:按命名空间包含/排除(如 newdb.*)。
- –uri:指定认证与主机,例如:
mongorestore --uri=“mongodb://user:pass@localhost:27017” /path/to/backup/
- 示例
- 恢复整个备份:
mongorestore /var/backups/mongobackups/10-29-20/
- 仅恢复 newdb 库:
mongorestore --db newdb /var/backups/mongobackups/10-29-20/newdb/
- 恢复 newdb.restaurants 集合:
mongorestore --db newdb --collection restaurants /var/backups/mongobackups/10-29-20/newdb/restaurants.bson
- 提示
- 逻辑备份能保留 BSON 数据类型 与 索引,适合迁移与常规恢复。
- 恢复后可用 mongo shell 执行 show dbs、use 、db..countDocuments() 校验。
三、时间点恢复与增量恢复(启用 Oplog 的副本集)
- 前提:源库为 副本集 且已开启 oplog,备份中包含 oplog.bson。
- 步骤
- 全量恢复:先按第二部分恢复最近一次全量备份。
- 回放增量:将 oplog 导入到一个临时库(如 oplog.rs),再按时间点回放:
mongorestore --oplogReplay --oplogLimit “” /path/to/oplog/
其中 为目标时间点(如 2025-12-18T10:00:00Z)。
- 说明
- 时间点恢复依赖 oplog,若 oplog 窗口不足,只能恢复到 oplog 覆盖的最近时刻。
- 单机模式无 oplog,无法做时间点恢复。
四、物理备份恢复(WiredTiger/RocksDB 数据目录拷贝)
- 适用场景:从云数据库或自建环境获取了 dbPath 的物理备份,需要在 Ubuntu 上原样恢复。
- 关键步骤
- 版本匹配:确保自建 MongoDB 的 大版本 与备份来源一致(如 4.2 对 4.2)。
- 准备环境:安装同版本 MongoDB,停止服务,清空或备份现有 dbPath。
- 恢复数据文件:将备份中的 collection-.wt、_mdb_catalog.wt、WiredTiger.、sizeStorer.wt、storage.bson 等文件拷入目标 dbPath。
- 启动与校验:
- 启动:mongod --dbpath /your/dbpath
- 校验:mongo --eval “show dbs” 与集合统计。
- 注意事项
- 物理恢复要求 存储引擎一致(WiredTiger/RocksDB),且文件权限与属主正确(如 mongod:mongod)。
- 若从云上物理备份恢复,通常先以 单节点 模式启动验证,再按需配置为 副本集(需清理 local.replset 配置)。
五、常见问题与排错要点
- 认证失败:使用 --uri 或在恢复前执行 mongo 登录,确保用户具备对目标库的 readWrite 权限。
- 版本不兼容:mongorestore 报错或恢复后数据异常,优先核对 MongoDB 主次版本一致性。
- 集合已存在冲突:加 --drop 覆盖恢复,或在恢复前手动清理目标集合。
- 索引未恢复或异常:逻辑备份应同时包含 .bson 与 .metadata.json,否则需手动重建索引。
- 物理恢复后启动失败:检查 WiredTiger 版本、文件完整性、目录权限,以及是否混用不同存储引擎的文件。