在 Ubuntu 上恢复 MongoDB 数据的实用步骤
一 标准恢复流程 mongorestore
- 准备与校验
- 确认备份为 mongodump 生成的目录(内含 .bson 与 .metadata.json 文件),并确认目标 MongoDB 版本与备份时兼容。
- 如在生产环境操作,建议先为现有数据做一次 mongodump 留底。
- 停止写入(强烈建议)
- 为避免恢复过程写入冲突,先停止应用或停止 mongod:sudo systemctl stop mongod。
- 执行恢复
- 全量恢复到指定库:sudo mongorestore --db yourDB /path/to/backup/yourDB
- 全量恢复到所有库:sudo mongorestore /path/to/backup/
- 覆盖写入更安全:sudo mongorestore --db yourDB --drop /path/to/backup/yourDB
- 指定命名空间恢复:sudo mongorestore --nsInclude yourDB. /path/to/backup/yourDB*
- 时间点恢复(需有 oplog):mongorestore --oplogReplay /path/to/oplog.bson
- 启动与验证
- 启动服务:sudo systemctl start mongod
- 进入 shell 校验:mongosh,use yourDB;db.yourCollection.countDocuments() 或 find().limit(10)。
- 常见提示
- 使用 --db/–collection 指向 .bson 文件的用法已被弃用,优先使用 –nsInclude。
以上流程适用于 Ubuntu 20.04/22.04 等常见版本,命令语法与行为与官方工具一致。
二 无备份时的 WT 文件离线恢复
- 适用场景
- 仅有 WiredTiger 数据文件(如 collection-*.wt、_mdb_catalog.wt、WiredTiger.wt 等)且无法正常启动的情况。
- 基本步骤
- 准备目录并拷贝必要文件(至少包含目标 collection-*.wt 与 _mdb_catalog.wt、WiredTiger.wt、sizeStorer.wt、storage.bson、WiredTiger 配置/锁文件*)。
- 使用 WiredTiger 工具进行“打捞”:
- 打捞:./wt -v -h /path/to/dump -C “extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]” -R salvage collection-xxx.wt
- 导出为可导入格式:
- 导出:./wt -v -h /path/to/dump -C “extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]” -R dump -f /path/collection.dump collection-xxx
- 在临时 MongoDB 实例中创建同名空集合(触发 WT 文件生成),再用 WiredTiger 将 dump 导回:
- 载入:./wt -v -h /var/lib/mongodb -C “extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]” -R load -f /path/collection.dump -r collection-xxx
- 修复权限并重启:chown -R mongodb:mongodb /var/lib/mongodb;sudo systemctl start mongod
- 为获得可用数据视图,建议对修复后的库再执行一次逻辑导出/导入:mongodump;mongorestore --drop
- 重要提示
- 该过程涉及底层文件操作,存在数据二次损坏风险;务必在只读副本或离线环境操作,并先做完整拷贝。
- 需要安装 WiredTiger 工具并匹配压缩库(如 snappy);不同 MongoDB 版本的 WT 格式可能不兼容。
上述方法已在多例 WT 损坏/误删场景中验证可行,但仅建议由有经验的 DBA 执行。
三 逻辑备份恢复 mongoexport 与 mongoimport
- 适用场景
- 仅有 JSON/CSV 导出文件(由 mongoexport 生成),或需要跨平台/跨大版本迁移。
- 恢复示例
- JSON:mongoimport --db yourDB --collection yourColl --file /path/file.json --upsert
- CSV:mongoimport --db yourDB --collection yourColl --type csv --file /path/file.csv --headerline
- 注意
- 逻辑导入不会保留 索引、存储引擎参数、部分 BSON 类型,适合数据迁移与轻量恢复;生产全量恢复优先使用 mongorestore。
该方式适合异构迁移与版本跨度较大的导入场景,工具可从 MongoDB 官方下载页面获取。
四 实用建议与常见问题
- 权限与路径
- 确保 /var/lib/mongodb 及备份目录对 mongodb 用户可读写:chown -R mongodb:mongodb /var/lib/mongodb;备份目录建议 700 权限。
- 版本与兼容性
- mongorestore 通常要求目标 MongoDB 版本 >= 备份版本;跨大版本恢复建议先小范围验证。
- 时间点恢复
- 需事先启用 oplog(通常为 副本集),并使用包含 oplog.bson 的备份:mongorestore --oplogReplay /path/to/oplog.bson。
- 一致性
- 对线上库恢复前尽量停止写入或使用维护窗口;恢复后用 count、抽样 find、校验和等方式核对数据完整性。
以上要点可显著降低恢复风险并提升成功率。