MongoDB 在 Ubuntu 上的数据迁移实操指南
一 迁移方式选型
- mongodump/mongorestore(BSON 逻辑备份):保留数据类型与索引,适合大多数同版本或跨小版本的迁移;对超大库建议按集合/时间分片导出以控制资源占用。
- mongoexport/mongoimport(JSON/CSV 逻辑导出):便于跨系统/跨平台与第三方工具对接,但存在BSON 特有类型保真度损失的风险,常用于子集迁移或分析场景。
- 复制集/Atlas Live Migration(在线迁移):源库不停机,适合生产环境;自建复制集可将数据“追平”到新集群,Atlas 提供一键在线迁移服务。
- 文件系统拷贝(仅限相同版本且同为数据目录):如使用 WiredTiger 存储引擎,直接拷贝 dbPath 数据目录并在目标端以相同配置启动;风险高,需停机且版本/配置严格一致,优先用于同机/同环境搬迁。
二 标准步骤 mongodump 到 mongorestore
- 源端备份(示例为全库,可按需加 –db 或 –collection)
- 命令:mongodump --uri=“mongodb://源主机:端口” --out=/var/backups/mongobackups/$(date +‘%F_%H-%M’)
- 说明:不加 –db 默认备份所有数据库;建议在低峰时段执行;如库很大,优先按集合或时间条件拆分备份。
- 传输到目标 Ubuntu
- 命令:scp -r /var/backups/mongobackups/目标主机:/var/backups/
- 目标端恢复(示例为全库,可按需加 –nsInclude 精确匹配库/集合)
- 命令:mongorestore --uri=“mongodb://目标主机:端口” --drop /var/backups/mongobackups/日期目录/
- 说明:–drop 会在恢复前删除同名集合,避免重复数据;新版 mongorestore 对 –db/–collection 的使用有约束,优先用 –nsInclude 指定命名空间。
- 验证
- 基本校验:mongosh --eval “db.stats()” 与源端对比库/集合数量与数据量;抽样集合做 count/doc 对比;关键索引是否存在。
三 跨版本与大数据量注意事项
- 版本兼容:尽量使用与目标端相同或更高的工具版本;跨大版本迁移建议先小范围演练,必要时通过中间版本过渡。
- 性能与资源:大数据量时限制导出范围(如 –query 时间窗)、分批导入、调整 writeConcern 与批量写入参数;必要时增加导入并发(如 –numInsertionWorkers)。
- 一致性:备份期间业务写入会导致一致性缺口;对关键业务,优先采用复制集/在线迁移或在停机窗口内执行。
- 索引与元数据:mongorestore 会恢复集合与索引元数据,但某些存储细节(如某些索引选项)可能受目标版本影响,恢复后需复核索引与执行计划。
四 常见场景命令速查
- 云数据库迁移到本地/新服务器
- 备份:mongodump --host <云主机> --port <端口> --username <用户> --password <密码> --out /path/to/dump
- 传输:scp -r /path/to/dump 用户@目标主机:/path/to/dump
- 恢复:mongorestore --host <目标主机> --port <端口> --username <用户> --password <密码> /path/to/dump
- 仅迁移部分集合或时间范围
- 备份:mongodump -d 数据库 -c 集合 -q ‘{“ts”: {“$gte”: ISODate(“2025-01-01”)}}’ -o /path/to/dump
- 恢复:mongorestore --nsInclude “数据库.集合” /path/to/dump/数据库/集合.bson
- 使用归档文件减少 I/O 与传输量
- 备份:mongodump --uri=“mongodb://源” --archive=/path/to/backup.archive
- 恢复:mongorestore --uri=“mongodb://目标” --archive=/path/to/backup.archive