温馨提示×

MongoDB在Ubuntu上的数据迁移

小樊
35
2025-11-23 01:58:44
栏目: 云计算

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

0