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
- 传输备份
- 目标库恢复
- 常规恢复(库/集合级):
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
- 副本集/分片需按原样配置 replSet、sharding 等参数后启动。
- 适用场景与注意
- 适合大体量、对停机敏感但可安排窗口的迁移;云上托管实例通常不支持直接拷贝文件,需走云厂商的物理备份恢复流程。
四 云数据库迁移到 Ubuntu 自建
- 方式 A(逻辑迁移,通用)
- 在云控制台创建备份或使用 mongodump 从云实例导出到本地/中转机,再用 mongorestore 恢复到 Ubuntu 自建库;若云实例开启了鉴权,注意 –authenticationDatabase admin 与账号权限。
- 方式 B(云厂商工具/物理备份)
- 下载云备份或申请物理备份,按文档恢复到自建环境;若下载的备份不能直接恢复到云实例,可先恢复到自建库,再用 DTS 迁回云实例。
- 连接与安全
- 校验
- 对比关键集合 count()、索引与样本查询结果,确保迁移正确。
五 常见问题与最佳实践
- 版本与兼容性
- 逻辑迁移跨小版本通常可行,但跨大版本需评估兼容性;物理迁移要求版本与存储引擎一致。
- 一致性保障
- 副本集用 –oplog 或停写;分片集群在备份期间停止均衡器与写入,恢复后再开启。
- 性能影响
- mongodump/mongorestore 会与实例交互并读取全量数据,可能对线上性能造成影响,建议在低峰期执行,并优先在测试环境验证备份可用性。
- 自动化与清理
- 结合 cron 定期备份并用 find … -mtime +N 清理旧备份,避免磁盘占满。
- 校验与回滚
- 迁移后做集合计数、索引与业务查询校验;保留一份可回滚的备份,必要时先恢复到测试库验证。