在Debian上恢复MongoDB数据的实用方法
一 方法总览与选择
- 使用 mongorestore 恢复由 mongodump 生成的 BSON 数据(推荐、安全、跨版本兼容性好)。
- 直接拷贝 数据文件(filesystem copy/rsync)到 /var/lib/mongodb 进行恢复(速度快,但需严格版本与配置匹配,风险较高)。
- 使用 mongoimport 导入 JSON/CSV 数据(适合小规模或特定集合的迁移/恢复)。
二 使用 mongorestore 恢复 BSON 备份(推荐)
- 准备环境
- 确认已安装数据库工具(包含 mongorestore)。在 Debian 12 上可直接安装包 mongodb-database-tools;旧版本或最小化系统可手动下载并解压工具到 /usr/local/mongodb/bin。示例:
- 安装包:sudo apt-get update && sudo apt-get install -y mongodb-database-tools
- 或手动下载工具并解压至 /usr/local/mongodb/bin(示例命令见下)。
- 基本恢复
- 恢复全量:mongorestore /path/to/backup/2025-04-01
- 恢复到指定库:mongorestore --db mydb /path/to/backup/2025-04-01/mydb
- 恢复到指定集合:mongorestore --db mydb --collection mycol /path/to/backup/2025-04-01/mydb/mycol.bson
- 常用选项
- –host/–port:指定目标实例(如 localhost:27017)。
- –gzip:备份为压缩格式时使用。
- –drop:恢复前删除同名集合(谨慎使用)。
- –nsInclude/–nsExclude:按命名空间包含/排除。
- 示例
- mongorestore --host 127.0.0.1 --port 27017 --gzip /backups/mongodb/2025-04-01
- mongorestore --host 127.0.0.1 --port 27017 --db sales --drop /backups/mongodb/2025-04-01/sales
三 直接拷贝数据文件恢复(文件系统方式)
- 适用场景
- 同版本、同存储引擎、同配置的数据目录整体迁移或灾难恢复。
- 操作步骤
- 停止服务:sudo systemctl stop mongod
- 备份现有数据目录(可选但强烈建议):sudo cp -a /var/lib/mongodb /var/lib/mongodb-backup-$(date +%F)
- 同步备份数据到数据目录(示例使用 rsync):sudo rsync -a /path/to/backup/mongodb/ /var/lib/mongodb/
- 修正权限:sudo chown -R mongodb:mongodb /var/lib/mongodb
- 启动服务:sudo systemctl start mongod
- 检查状态:sudo systemctl status mongod;用 mongosh 连接验证集合与文档。
- 重要提示
- 不建议在运行中的实例上直接覆盖 /var/lib/mongodb;文件系统方式对 WiredTiger 与 MMAPv1 的细节要求不同,版本不一致可能导致启动失败或数据损坏。
四 使用 mongoimport 导入 JSON 或 CSV
- 适用场景
- 仅有 JSON/CSV 导出文件(由 mongoexport 生成)或仅需恢复部分集合/文档。
- 基本用法
- 导入集合:mongoimport --db mydb --collection mycol --file /path/to/file.json --type json
- 导入 CSV:mongoimport --db mydb --collection mycol --file /path/to/file.csv --type csv --headerline
- 指定主机端口:–host 127.0.0.1 --port 27017
- 注意
- JSON 导入默认按行处理(每行一个文档);CSV 需包含列名并加 –headerline。
五 实践建议与常见问题
- 恢复前先在测试环境演练,确认索引、验证器、视图、用户权限等是否一并恢复。
- 使用 –gzip 备份与恢复可减少磁盘与网络占用;大数据量建议分批恢复。
- 若需时间点恢复,备份时应包含 oplog(mongodump --oplog),恢复时使用 oplog 回放到指定时间点。
- 权限与所有权:确保 /var/lib/mongodb 与 /var/log/mongodb 归属 mongodb:mongodb,否则实例可能无法启动。
- 版本匹配:尽量保持 备份工具版本 与 目标 MongoDB 版本一致;跨大版本恢复时优先使用 mongorestore。