在 Debian 上恢复 MongoDB 数据的实用步骤
一 恢复方式概览
- 使用 mongorestore 恢复由 mongodump 生成的 BSON 数据(推荐,安全、灵活,支持按库/集合恢复)。
- 直接拷贝 数据文件(filesystem 方式)到 /var/lib/mongodb 目录(需停库、权限一致,风险较高,适合整实例迁移)。
- 使用 mongoimport 导入 JSON/CSV 文件(适合小规模或特定集合的数据导入)。
二 方式一 mongorestore 恢复 BSON 备份(推荐)
- 安装工具(若系统未自带 mongorestore):
- Debian 包方式:sudo apt-get update && sudo apt-get install -y mongodb-database-tools
- 或下载 .deb 包后用:sudo dpkg -i mongodb-database-tools-*.deb
- 验证:mongorestore --version
- 基本用法:
- 恢复全量: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
- 压缩备份:mongorestore --gzip /path/to/backup/2025-04-01
- 常用选项:
- –host 与 --port(远程恢复)
- –drop(恢复前删除同名集合,谨慎使用)
- –nsInclude/–nsExclude(按命名空间包含/排除)
- 示例流程:
- 查看备份目录结构,确认包含 .bson 与 .metadata.json
- 执行恢复:mongorestore --dir /path/to/backup/2025-04-01
- 连接 mongosh 校验:show dbs; use mydb; db.mycol.countDocuments({})
三 方式二 文件系统拷贝恢复(整实例迁移)
- 建议先停库并备份现有数据(可选但强烈建议):
- sudo systemctl stop mongod
- sudo cp -a /var/lib/mongodb /var/lib/mongodb-backup-$(date +%F)
- 拷贝备份数据到数据目录(路径以你的实际配置为准,WiredTiger 默认在 /var/lib/mongodb):
- sudo cp -a /path/to/backup/mongodb /var/lib/mongodb
- 修正权限(Debian 上 MongoDB 运行用户通常为 mongodb):
- sudo chown -R mongodb:mongodb /var/lib/mongodb
- 如有单独日志目录:sudo chown -R mongodb:mongodb /var/log/mongodb
- 启动并检查:
- sudo systemctl start mongod
- sudo systemctl status mongod
- mongosh 连接验证数据一致性
四 方式三 mongoimport 导入 JSON 或 CSV
- 适用场景:仅有 JSON/CSV 导出文件,或只需导入少量集合。
- 示例:
- 导入 JSON 到集合:mongoimport --db mydb --collection mycol --file data.json --type json
- 导入 CSV 到集合:mongoimport --db mydb --collection mycol --file data.csv --type csv --headerline
- 注意:
- JSON 导入默认按行处理,每行一个文档;CSV 需 --headerline 使用首行作为字段名。
- 该方式不会恢复索引、触发器、用户与角色等元数据,需另行处理。
五 注意事项与最佳实践
- 版本兼容:确保 mongorestore/mongoimport 与 mongod 版本兼容;工具可用 mongorestore --version 检查。
- 目标库存在性:同名集合/库已存在时,mongorestore 默认会插入而非覆盖;如需覆盖,使用 –drop(风险操作,先做好备份)。
- 权限与所有权:恢复前后确保 /var/lib/mongodb 与 /var/log/mongodb 归属 mongodb:mongodb,否则可能无法启动或访问数据。
- 一致性:文件系统拷贝方式务必在停库状态下进行;使用 mongorestore 可在运行中恢复,但可能对正在写入的业务产生影响,建议在低峰期执行。
- 校验:恢复后用 mongosh 执行 count、find 抽查关键集合,并核对索引与约束。