首页主机资讯MongoDB在Linux上如何进行数据迁移

MongoDB在Linux上如何进行数据迁移

时间2025-12-12 23:59:05发布访客分类主机资讯浏览995
导读:Linux下MongoDB数据迁移实用指南 一、方案总览与选择 逻辑导出导入(适合跨版本、跨平台、只迁部分库/集合) 工具:mongodump/mongorestore(BSON,保留类型与索引,适合整库/大批量)、mongoexpor...

Linux下MongoDB数据迁移实用指南

一、方案总览与选择

  • 逻辑导出导入(适合跨版本、跨平台、只迁部分库/集合)
    • 工具:mongodump/mongorestore(BSON,保留类型与索引,适合整库/大批量)、mongoexport/mongoimport(JSON/CSV,可读性好,适合少量集合或特定查询导出)。
  • 物理文件拷贝(同版本、同配置最快)
    • 方式:停库后拷贝dbPath数据目录到新机器,保持storage.dbPath与权限一致后启动。
  • 复制集在线迁移(不停机或低停机)
    • 方式:向原副本集新增新节点→数据追平→短暂停写→摘除新节点→在新环境以该节点为种子重建副本集;或使用云厂商DTS做全量+增量迁移。
  • 云上迁移
    • 多数云厂商提供DTS或数据传输服务,支持副本集的全量+增量迁移,适合上云与跨地域迁移。

二、标准操作步骤

  • 逻辑迁移(mongodump/mongorestore)
    1. 源库备份
    • 整库:mongodump --host < 源地址:端口> -u < 用户> -p --authenticationDatabase admin -o < 备份目录>
    • 单库:在上述命令中增加 -d < 数据库名>
    1. 传输备份
    • scp -r < 备份目录> < 目标用户> @< 新主机> :< 目标目录>
    1. 目标库恢复
    • 整库:mongorestore --host < 目标地址:端口> -u < 用户> -p --authenticationDatabase admin < 备份目录>
    • 单库/改名:mongorestore --host < 目标地址:端口> -u < 用户> -p --authenticationDatabase admin -d < 新库名> < 备份目录> /< 原库名>
    • 谨慎使用 --drop(恢复前会删除同名集合)。
  • 逻辑迁移(mongoexport/mongoimport,JSON/CSV)
    1. 导出集合
    • mongoexport --host < 源地址:端口> -u < 用户> -p --authenticationDatabase admin -d < 库名> -c < 集合名> -o < 文件> .json
    • 可用 -f 指定字段,-q 指定查询条件导出子集。
    1. 导入集合
    • mongoimport --host < 目标地址:端口> -u < 用户> -p --authenticationDatabase admin -d < 库名> -c < 集合名> --file < 文件> .json
    • CSV 使用 --type=csv -f “字段1,字段2”。
  • 物理迁移(文件拷贝)
    1. 停源库:sudo systemctl stop mongod(或 mongod --shutdown)
    2. 拷贝数据目录(默认常见路径:/var/lib/mongodb):
      • rsync -avz --progress /var/lib/mongodb/ < 目标用户> @< 新主机> :/var/lib/mongodb/
    3. 目标库配置:确保 /etc/mongod.conf 中 storage.dbPath 与日志路径正确,文件权限与属主一致(如 mongod:mongod)。
    4. 启动目标库:sudo systemctl start mongod
    5. 开放端口(如启用防火墙):sudo ufw allow 27017/tcp 或按需配置 iptables。
  • 复制集在线迁移(不停机思路)
    1. 在新机器部署同版本 MongoDB,准备 dbPath、配置与 keyFile(如启用鉴权/复制)。
    2. 在原副本集添加新节点(优先从Secondary拷贝数据以缩短追平时间):
      • 在 Secondary 上执行:db.fsyncLock() → 拷贝数据目录到新节点 → db.fsyncUnlock()
      • 启动新节点并以 rs.add(“< 新节点:端口> ”) 加入原副本集,等待 stateStr 变为 SECONDARY
    3. 切换窗口:短暂停止写入 → 在新节点上创建临时标记集合并验证已同步 → 从原副本集 rs.remove(“< 新节点:端口> ”)。
    4. 以新节点为种子在新环境重建副本集: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。
  • 禁止导入系统库
    • 多数云实例禁止导入 localadmin 系统库,避免元数据错乱与鉴权失败。
  • 一致性
    • 逻辑整库迁移前尽量停写;复制集/云 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
Ubuntu中PHP内存不足怎么调 如何优化Linux下MongoDB内存使用

游客 回复需填写必要信息