温馨提示×

MongoDB在Linux上的数据迁移方法

小樊
47
2025-11-22 21:06:39
栏目: 云计算

MongoDB在Linux上的数据迁移方法

一、方法总览与选择

  • 文件系统拷贝法(物理迁移):直接拷贝数据目录(如 /var/lib/mongodb),停机一致性最好,适合同版本、同架构、同存储引擎的迁移。
  • 逻辑备份恢复(mongodump/mongorestore):导出为BSON再导入,跨版本、跨平台更友好,适合部分库/集合迁移或带选择性恢复。
  • 导出导入(mongoexport/mongoimport):导出为JSON/CSV,最通用但仅限集合级,类型/索引需额外处理,适合小数据量或异构系统交换。

二、方法一 文件系统拷贝法(物理迁移)

  • 适用场景:同版本迁移、停机可接受、希望快速完整迁移。
  • 核心步骤:
    1. 停库(确保一致性)
      • systemd:sudo systemctl stop mongod
      • 或 mongo shell:use admin; db.shutdownServer();
    2. 拷贝数据目录(保持权限)
      • rsync:sudo rsync -avz --progress /var/lib/mongodb/ user@new_server_ip:/var/lib/mongodb/
      • 或打包传输:tar jcvf data.tar.bz2 /var/lib/mongodb && scp data.tar.bz2 user@new_server_ip:/tmp
    3. 目标机调整配置(/etc/mongod.conf)
      • storage.dbPath: /var/lib/mongodb
      • systemLog.path: /var/log/mongodb/mongod.log
    4. 启动与放行端口
      • sudo systemctl start mongod
      • ufw:sudo ufw allow 27017/tcp;iptables:sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT
    5. 验证
      • mongo --host new_server_ip --port 27017
      • 检查集合数、文档数、索引、关键业务查询
  • 注意:目标机 MongoDB 版本与源机尽量一致;若 dbPath 不同需同步修改配置;拷贝时保持文件属主/权限一致(常见为 mongodb:mongodb)。

三、方法二 逻辑备份恢复(mongodump/mongorestore)

  • 适用场景:跨版本/跨平台、只需迁移部分库或集合、需要选择性恢复。
  • 核心步骤:
    1. 源机备份
      • mongodump -h 127.0.0.1:27017 -d mydb -o /tmp/backup
    2. 传输备份
      • scp -r /tmp/backup user@new_server_ip:/tmp
    3. 目标机恢复
      • mongorestore -h 127.0.0.1:27017 -d mydb /tmp/backup/mydb
      • 如需先清空再恢复:mongorestore -d mydb --drop /tmp/backup/mydb
  • 说明:工具需与目标机 MongoDB 版本匹配;如开启认证,增加 -u/-p 参数;适合库/集合级迁移与灰度回放。

四、方法三 导出导入(mongoexport/mongoimport)

  • 适用场景:导出为 JSON/CSV 便于与外部系统交换,或数据量较小、对类型精度要求不高的集合迁移。
  • 核心步骤:
    1. 安装数据库工具(MongoDB Database Tools)
      • 下载对应平台包(如 mongodb-database-tools-rhel80-x86_64-100.5.3.tgz),解压后将 bin 加入 PATH。
    2. 源机导出
      • mongoexport -h 127.0.0.1:27017 -d mydb -c mycol -o mycol.json
      • 如开启认证:追加 -u user -p password
    3. 传输文件
      • scp mycol.json user@new_server_ip:/tmp
    4. 目标机导入
      • mongoimport -h 127.0.0.1:27017 -d mydb -c mycol /tmp/mycol.json
      • 如需覆盖:–mode=upsert;类型/索引需单独处理(JSON为逻辑结构,索引不会自动从导出文件恢复)
  • 说明:适合小数据量或异构系统;大表建议用 mongodump/mongorestore 或物理拷贝。

五、关键注意事项与常见问题

  • 版本兼容:跨大版本(如 4.x → 5.x/6.x)优先用逻辑方式;物理拷贝尽量保持版本一致。
  • 一致性:文件系统拷贝务必停库;逻辑方式在运行期导出可能有会话/事务一致性限制。
  • 认证与网络:开启 auth 时使用 -u/-p;确保 27017 端口放通(云主机安全组/本机防火墙)。
  • 配置与路径:确认 /etc/mongod.conf 中的 storage.dbPathsystemLog.path 与目录权限正确。
  • 索引与类型:mongoexport/mongoimport 不保证索引/类型完全等价,恢复后按需重建索引与校验类型。
  • 验证:核对集合数、文档数、索引、关键查询结果与校验和(如重要集合抽样 count/聚合/样本对比)。

0