MongoDB在Linux上如何进行数据迁移
导读:Linux下MongoDB数据迁移实用指南 一、方案总览与选择 逻辑导出导入(适合跨版本、跨平台、只迁部分库/集合) 工具:mongodump/mongorestore(BSON,保留类型与索引,适合整库/大批量)、mongoexpor...
Linux下MongoDB数据迁移实用指南
一、方案总览与选择
- 逻辑导出导入(适合跨版本、跨平台、只迁部分库/集合)
- 工具:mongodump/mongorestore(BSON,保留类型与索引,适合整库/大批量)、mongoexport/mongoimport(JSON/CSV,可读性好,适合少量集合或特定查询导出)。
- 物理文件拷贝(同版本、同配置最快)
- 方式:停库后拷贝dbPath数据目录到新机器,保持storage.dbPath与权限一致后启动。
- 复制集在线迁移(不停机或低停机)
- 方式:向原副本集新增新节点→数据追平→短暂停写→摘除新节点→在新环境以该节点为种子重建副本集;或使用云厂商DTS做全量+增量迁移。
- 云上迁移
- 多数云厂商提供DTS或数据传输服务,支持副本集的全量+增量迁移,适合上云与跨地域迁移。
二、标准操作步骤
- 逻辑迁移(mongodump/mongorestore)
- 源库备份
- 整库:mongodump --host < 源地址:端口> -u < 用户> -p --authenticationDatabase admin -o < 备份目录>
- 单库:在上述命令中增加 -d < 数据库名>
- 传输备份
- scp -r < 备份目录> < 目标用户> @< 新主机> :< 目标目录>
- 目标库恢复
- 整库:mongorestore --host < 目标地址:端口> -u < 用户> -p --authenticationDatabase admin < 备份目录>
- 单库/改名:mongorestore --host < 目标地址:端口> -u < 用户> -p --authenticationDatabase admin -d < 新库名> < 备份目录> /< 原库名>
- 谨慎使用 --drop(恢复前会删除同名集合)。
- 逻辑迁移(mongoexport/mongoimport,JSON/CSV)
- 导出集合
- mongoexport --host < 源地址:端口> -u < 用户> -p --authenticationDatabase admin -d < 库名> -c < 集合名> -o < 文件> .json
- 可用 -f 指定字段,-q 指定查询条件导出子集。
- 导入集合
- mongoimport --host < 目标地址:端口> -u < 用户> -p --authenticationDatabase admin -d < 库名> -c < 集合名> --file < 文件> .json
- CSV 使用 --type=csv -f “字段1,字段2”。
- 物理迁移(文件拷贝)
- 停源库:sudo systemctl stop mongod(或 mongod --shutdown)
- 拷贝数据目录(默认常见路径:/var/lib/mongodb):
- rsync -avz --progress /var/lib/mongodb/ < 目标用户> @< 新主机> :/var/lib/mongodb/
- 目标库配置:确保 /etc/mongod.conf 中 storage.dbPath 与日志路径正确,文件权限与属主一致(如 mongod:mongod)。
- 启动目标库:sudo systemctl start mongod
- 开放端口(如启用防火墙):sudo ufw allow 27017/tcp 或按需配置 iptables。
- 复制集在线迁移(不停机思路)
- 在新机器部署同版本 MongoDB,准备 dbPath、配置与 keyFile(如启用鉴权/复制)。
- 在原副本集添加新节点(优先从Secondary拷贝数据以缩短追平时间):
- 在 Secondary 上执行:db.fsyncLock() → 拷贝数据目录到新节点 → db.fsyncUnlock()
- 启动新节点并以 rs.add(“< 新节点:端口> ”) 加入原副本集,等待 stateStr 变为 SECONDARY。
- 切换窗口:短暂停止写入 → 在新节点上创建临时标记集合并验证已同步 → 从原副本集 rs.remove(“< 新节点:端口> ”)。
- 以新节点为种子在新环境重建副本集:rs.reconfig({ _id:“rsX”, members:[{ _id:0,host:“新主:端口”,priority:99} , …]} ),检查 rs.status()。
- 云上迁移(DTS)
- 创建 DTS 任务,配置源/目标连接与鉴权,选择全量或全量+增量,完成预检查后启动;增量同步不会自动结束,可按需暂停/停止。
三、关键注意事项
- 版本与兼容性
- mongodump/mongorestore 建议与目标库版本一致或兼容;逻辑导出导入(JSON/CSV)跨版本更灵活但可能丢失类型精度。
- 鉴权与账户
- 使用 --authenticationDatabase(常见为 admin);若账户为旧机制(如 MONGODB-CR),需加 --authenticationMechanism=MONGODB-CR。
- 禁止导入系统库
- 多数云实例禁止导入 local、admin 系统库,避免元数据错乱与鉴权失败。
- 一致性
- 逻辑整库迁移前尽量停写;复制集/云 DTS 可用增量同步降低停机窗口。
- 索引与选项
- mongorestore 默认会重建索引;如只需导入数据可关闭索引构建(视工具版本与参数而定)。
- 大对象与性能
- JSON/CSV 不适合超大数据集;BSON 方式更稳更快。分片集群需按分片导出/恢复或使用专用工具(如 MongoShake)。
四、常用命令速查
- 整库备份与恢复
- mongodump --host 源IP:27017 -u 用户 -p --authenticationDatabase admin -o /data/dump
- mongorestore --host 目标IP:27017 -u 用户 -p --authenticationDatabase admin /data/dump
- 单库迁移(可改名)
- mongodump --host 源IP:27017 -u 用户 -p --authenticationDatabase admin -d 原库 -o /data/dump
- mongorestore --host 目标IP:27017 -u 用户 -p --authenticationDatabase admin -d 新库 /data/dump/原库
- 单集合导出导入(JSON)
- mongoexport --host 源IP:27017 -u 用户 -p --authenticationDatabase admin -d 库 -c 集合 -o 集合.json
- mongoimport --host 目标IP:27017 -u 用户 -p --authenticationDatabase admin -d 库 -c 集合 --file 集合.json
- 物理迁移常用
- rsync -avz --progress /var/lib/mongodb/ 用户@目标IP:/var/lib/mongodb/
- sudo systemctl restart mongod(启动前确认 dbPath、权限、SELinux/AppArmor 策略)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MongoDB在Linux上如何进行数据迁移
本文地址: https://pptw.com/jishu/771088.html
