温馨提示×

Ubuntu下MongoDB如何迁移

小樊
38
2025-12-08 19:39:02
栏目: 云计算

Ubuntu 下 MongoDB 迁移实操指南

一 迁移方式选型

  • 逻辑迁移:使用 mongodump/mongorestore 导出为 BSON(或归档到单文件/标准输出),再在目标库恢复。优点是通用、跨版本/跨平台灵活;注意对运行中的实例会有一定性能影响,且对副本集需采取措施保证一致性。适合大多数单机、测试、版本升级与中小规模数据迁移。
  • 物理迁移:直接拷贝数据文件(如 dbPath 目录)或使用云厂商提供的物理备份恢复。优点是速度快、一致性好;要求 MongoDB 版本一致、存储引擎一致、拓扑一致(如副本集/分片),更适合大库与严格一致性的场景。
  • 云上场景:云数据库 MongoDB 常提供“下载备份/物理备份恢复/库表恢复/按时间点恢复/DTS 迁移”等能力;若下载的备份不能直接恢复到云实例,可先恢复到自建库,再用 DTS 迁回云实例。

二 逻辑迁移步骤(mongodump/mongorestore)

  • 源库准备
    • 尽量在业务低峰期执行;对副本集,使用 –oplog 捕获备份期间的写入,或在备份窗口内停止写入,确保一致性。
    • 如需压缩/单文件传输,可使用 –archive 导出到归档或 stdout
  • 备份命令示例
    • 备份单个库到时间戳目录:
      mongodump --host <源主机> --port <端口> -u <用户> -p --authenticationDatabase admin \
        --db <源库名> --out /var/backups/mongobackups/$(date +'%F')
      
    • 备份为归档并压缩传输:
      mongodump --host <源主机> --port <端口> -u <用户> -p --authenticationDatabase admin \
        --db <源库名> --archive=/tmp/<源库名>.archive --gzip
      
  • 传输备份
    • 复制到目标 Ubuntu:
      rsync -avz /var/backups/mongobackups/ user@目标IP:/var/backups/mongobackups/
      # 或拷贝归档
      scp /tmp/<源库名>.archive user@目标IP:/tmp/
      
  • 目标库恢复
    • 常规恢复(库/集合级):
      mongorestore --host <目标主机> --port <端口> -u <用户> -p --authenticationDatabase admin \
        --db <目标库名> /var/backups/mongobackups/<日期>/<源库名>/
      
    • 从归档恢复:
      mongorestore --host <目标主机> --port <端口> -u <用户> -p --authenticationDatabase admin \
        --db <目标库名> --archive=/tmp/<源库名>.archive --gzip
      
    • 如需在恢复前清空目标库,可加 –drop(谨慎使用)。
  • 一致性要点
    • 副本集备份务必使用 –oplog 或停写;分片集群建议按官方流程“停止均衡器→停写→备份→恢复→恢复均衡器”。
    • 迁移后抽样校验集合 count()、索引数量与关键业务查询。

三 物理迁移步骤(适用于同版本、同引擎、同拓扑)

  • 前提条件
    • 目标环境与源环境 MongoDB 版本一致存储引擎一致(如都为 WiredTiger)、拓扑一致(单机/副本集/分片一致)。
    • 停机窗口内完成数据文件拷贝,避免写入导致不一致。
  • 操作步骤
    • 源库停机并确认无写入:
      sudo systemctl stop mongod
      
    • 拷贝数据目录(默认 /var/lib/mongodb)到目标:
      rsync -avz /var/lib/mongodb/ user@目标IP:/var/lib/mongodb/
      
    • 目标库调整权限并启动:
      sudo chown -R mongodb:mongodb /var/lib/mongodb
      sudo systemctl start mongod
      
    • 副本集/分片需按原样配置 replSetsharding 等参数后启动。
  • 适用场景与注意
    • 适合大体量、对停机敏感但可安排窗口的迁移;云上托管实例通常不支持直接拷贝文件,需走云厂商的物理备份恢复流程。

四 云数据库迁移到 Ubuntu 自建

  • 方式 A(逻辑迁移,通用)
    • 在云控制台创建备份或使用 mongodump 从云实例导出到本地/中转机,再用 mongorestore 恢复到 Ubuntu 自建库;若云实例开启了鉴权,注意 –authenticationDatabase admin 与账号权限。
  • 方式 B(云厂商工具/物理备份)
    • 下载云备份或申请物理备份,按文档恢复到自建环境;若下载的备份不能直接恢复到云实例,可先恢复到自建库,再用 DTS 迁回云实例。
  • 连接与安全
    • 云实例公网地址、端口(如 Serverless 常见端口 3717)、账号与 IP 白名单需提前配置;恢复命令示例:
      mongorestore --host <云实例公网地址>:<端口> -u <用户名> -p \
        -d <目标库名> /dump/<源库名> --authenticationDatabase admin
      
  • 校验
    • 对比关键集合 count()、索引与样本查询结果,确保迁移正确。

五 常见问题与最佳实践

  • 版本与兼容性
    • 逻辑迁移跨小版本通常可行,但跨大版本需评估兼容性;物理迁移要求版本与存储引擎一致。
  • 一致性保障
    • 副本集用 –oplog 或停写;分片集群在备份期间停止均衡器与写入,恢复后再开启。
  • 性能影响
    • mongodump/mongorestore 会与实例交互并读取全量数据,可能对线上性能造成影响,建议在低峰期执行,并优先在测试环境验证备份可用性。
  • 自动化与清理
    • 结合 cron 定期备份并用 find … -mtime +N 清理旧备份,避免磁盘占满。
  • 校验与回滚
    • 迁移后做集合计数、索引与业务查询校验;保留一份可回滚的备份,必要时先恢复到测试库验证。

0