MongoDB在Linux上的数据迁移方法
一、方法总览与选择
- 文件系统拷贝法(物理迁移):直接拷贝数据目录(如 /var/lib/mongodb),停机一致性最好,适合同版本、同架构、同存储引擎的迁移。
- 逻辑备份恢复(mongodump/mongorestore):导出为BSON再导入,跨版本、跨平台更友好,适合部分库/集合迁移或带选择性恢复。
- 导出导入(mongoexport/mongoimport):导出为JSON/CSV,最通用但仅限集合级,类型/索引需额外处理,适合小数据量或异构系统交换。
二、方法一 文件系统拷贝法(物理迁移)
- 适用场景:同版本迁移、停机可接受、希望快速完整迁移。
- 核心步骤:
- 停库(确保一致性)
- systemd:sudo systemctl stop mongod
- 或 mongo shell:use admin; db.shutdownServer();
- 拷贝数据目录(保持权限)
- 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
- 目标机调整配置(/etc/mongod.conf)
- storage.dbPath: /var/lib/mongodb
- systemLog.path: /var/log/mongodb/mongod.log
- 启动与放行端口
- sudo systemctl start mongod
- ufw:sudo ufw allow 27017/tcp;iptables:sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT
- 验证
- mongo --host new_server_ip --port 27017
- 检查集合数、文档数、索引、关键业务查询
- 注意:目标机 MongoDB 版本与源机尽量一致;若 dbPath 不同需同步修改配置;拷贝时保持文件属主/权限一致(常见为 mongodb:mongodb)。
三、方法二 逻辑备份恢复(mongodump/mongorestore)
- 适用场景:跨版本/跨平台、只需迁移部分库或集合、需要选择性恢复。
- 核心步骤:
- 源机备份
- mongodump -h 127.0.0.1:27017 -d mydb -o /tmp/backup
- 传输备份
- scp -r /tmp/backup user@new_server_ip:/tmp
- 目标机恢复
- 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 便于与外部系统交换,或数据量较小、对类型精度要求不高的集合迁移。
- 核心步骤:
- 安装数据库工具(MongoDB Database Tools)
- 下载对应平台包(如 mongodb-database-tools-rhel80-x86_64-100.5.3.tgz),解压后将 bin 加入 PATH。
- 源机导出
- mongoexport -h 127.0.0.1:27017 -d mydb -c mycol -o mycol.json
- 如开启认证:追加 -u user -p password
- 传输文件
- scp mycol.json user@new_server_ip:/tmp
- 目标机导入
- 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.dbPath、systemLog.path 与目录权限正确。
- 索引与类型:mongoexport/mongoimport 不保证索引/类型完全等价,恢复后按需重建索引与校验类型。
- 验证:核对集合数、文档数、索引、关键查询结果与校验和(如重要集合抽样 count/聚合/样本对比)。