Ubuntu 上 MongoDB 数据迁移实操指南
一 迁移方式与选择
- 工具迁移(mongodump/mongorestore):导出为 MongoDB 原生的 BSON 二进制格式,保留数据类型与索引元信息,适合大多数同版本或跨版本迁移、上云与跨机房迁移。建议在源库低峰期执行,必要时先停写以保证一致性。对于不停机需求,优先考虑数据库原生复制或云厂商的迁移服务。
- 逻辑导出/导入(mongoexport/mongoimport):导出为 JSON/CSV,人类可读、便于编辑与跨系统交换,但存在数据类型保真度损失,且重建索引与约束成本较高,通常不作为生产迁移首选。
- 云上或大规模迁移:优先使用云厂商的 DTS/数据传输服务 实现全量+增量迁移,降低停机窗口与运维复杂度。
二 标准步骤 mongodump 与 mongorestore
- 版本与工具准备
- 建议 mongodump/mongorestore 版本与源库 MongoDB 版本一致或兼容;工具可在源库服务器本地执行,无需额外安装到目标库。
- 在 Ubuntu 上可通过包管理器或安装 MongoDB Database Tools(包含 mongodump/mongorestore)来更新工具版本。
- 源库备份
- 无鉴权示例:mongodump --host 127.0.0.1 --port 27017 --out /var/backups/mongobackups/$(date +‘%m-%d-%y’)
- 有鉴权示例:mongodump --host <mongodb_host> --port -u --authenticationDatabase (执行后输入密码)
- 备份默认生成 dump/ 目录(或按日期目录),内含各库/集合的 .bson 与 .metadata.json。
- 传输备份
- 使用 scp/rsync 将备份目录复制到目标服务器,例如:rsync -avz /var/backups/mongobackups/ user@target:/data/backup/
- 目标库恢复
- 全量恢复:mongorestore --host <target_host> --port -u --authenticationDatabase /data/backup/dump/
- 指定库/集合:mongorestore --nsInclude newdb.restaurants --drop /data/backup/dump/newdb/
- 如需先清空目标再写入,使用 –drop;恢复时请使用 –nsInclude 指定命名空间(旧参数如 --db/–collection 已不推荐)。
- 常见要点
- 建议在源库业务低峰或短暂停写后执行全量迁移;迁移完成后用抽样校验与集合统计进行验证。
三 不停机迁移与云上方案
- 自建至云数据库 MongoDB(单节点)全量迁移
- 在源库服务器执行 mongodump 生成 dump/;将源库服务器 IP 加入目标实例白名单;在源库服务器执行 mongorestore 将数据写入目标实例(云实例 Primary 地址)。该方式简单可靠,但为全量迁移,需业务停写或接受短暂不一致窗口。
- 自建副本集至云数据库 MongoDB(副本集/分片集群)迁移
- 使用 DTS 配置结构迁移 + 全量迁移 + 增量迁移,实现近 零停机。关键要求:
- 源库开启 Oplog 且至少保留 7 天,或开启 Change Streams(MongoDB 4.0+);否则无法获取增量变更。
- 目标端存储空间建议比源端多 10%;分片集群需提前规划 分片键、开启 Balancer 并做预分片,避免数据倾斜。
- 迁移期间避免结构变更与大规模写入;DTS接入不支持 SRV 地址,建议使用主节点地址或高可用连接地址。
四 常见问题与排错要点
- 版本与兼容性
- 工具版本与源库尽量一致;跨版本迁移前评估兼容性(如存储引擎、索引/特性差异)。
- 鉴权与网络
- 正确设置 –authenticationDatabase;云实例需配置 白名单;避免使用 SRV 地址接入 DTS;公网/专有网络连接需保证网络与带宽。
- 一致性
- 全量迁移前尽量 停写;副本集/云迁移建议启用 增量 阶段以追平变更。
- 目标库已有数据
- mongorestore 默认会写入备份中的集合与索引,可能导致 覆盖/重复;如需保留目标库数据,先做好备份,或使用按库/按集合分批恢复并校验。
- 大对象限制
- 单条文档不得超过 16 MB,否则迁移任务会失败。
- 工具可用性
- 若系统缺失 mongodump/mongorestore,安装或升级 MongoDB Database Tools 后再执行迁移。