温馨提示×

MongoDB在Linux上的数据迁移技巧有哪些

小樊
46
2025-10-08 00:42:55
栏目: 云计算

1. mongodump/mongorestore工具(全量/跨版本迁移首选)
这是MongoDB官方推荐的通用迁移方案,通过导出BSON格式的二进制数据实现高效迁移。操作步骤如下:

  • 导出数据:在源Linux服务器上执行mongodump --host=源主机 --port=源端口 --db=数据库名 --out=./backup,将指定数据库导出到本地backup目录(BSON格式保留索引、数据类型等完整信息)。
  • 传输备份文件:使用scp -r ./backup user@目标服务器IP:/目标路径将备份目录传输到目标服务器。
  • 恢复数据:在目标服务器上执行mongorestore --host=目标主机 --port=目标端口 --db=数据库名 /目标路径/backup/数据库名,将数据导入目标MongoDB实例。
    适用场景:小型/中型数据库迁移、跨版本升级(如3.x→4.x→5.x)、需要完整备份恢复的场景。
    注意事项:迁移前需停止源数据库的写入操作(或使用--oplog参数记录增量操作,适用于需要一致性的场景);确保目标服务器MongoDB版本兼容源版本(如3.6→4.0需注意索引变更)。

2. mongoexport/mongoimport工具(选择性/异构数据迁移)
若只需迁移部分集合或需要将数据转换为JSON/CSV格式(如与其他系统交换数据),可使用此工具。操作步骤如下:

  • 导出单个集合:在源服务器上执行mongoexport --host=源主机 --db=数据库名 --collection=集合名 --out=集合名.json(JSON格式)或--type=csv(CSV格式,需指定字段--fields=field1,field2)。
  • 传输导出文件:使用scp将JSON/CSV文件传输到目标服务器。
  • 导入数据:在目标服务器上执行mongoimport --host=目标主机 --db=数据库名 --collection=集合名 --file=集合名.json(JSON)或--type=csv --headerline(CSV,自动识别表头)。
    适用场景:选择性迁移部分集合、跨系统数据交换(如MySQL→MongoDB)、数据结构转换(如调整字段类型)。

3. 副本集扩展迁移(大规模生产环境最小化停机)
对于大规模数据或生产环境,可通过将目标服务器添加为源副本集的次要节点,利用MongoDB的oplog实现实时同步,最后切换为主节点。操作步骤如下:

  • 准备目标服务器:安装与源服务器相同版本的MongoDB,配置mongod.conf文件(设置replication.replSetName与源集群一致,如rs0)。
  • 添加次要节点:在源副本集的Primary节点上执行rs.add("目标服务器IP:端口"),目标服务器开始同步数据。
  • 验证同步状态:执行rs.status(),确认目标节点的stateStrSECONDARYoptimeDate与Primary一致。
  • 切换角色:停止源服务器的MongoDB服务,将目标服务器提升为Primary(rs.reconfig(cfg, {force: true}),需谨慎使用force参数)。
    适用场景:大规模数据迁移(TB级)、生产环境零停机或最小化停机、同版本/兼容版本间迁移。

4. 直接复制数据文件(快速迁移,适合同版本)
若源和目标服务器的MongoDB版本完全一致,且数据量较大,可直接复制数据目录(默认/var/lib/mongodb)实现快速迁移。操作步骤如下:

  • 停止源服务:执行sudo systemctl stop mongod停止MongoDB服务。
  • 同步数据目录:使用rsync -avz --progress /var/lib/mongodb/ user@目标服务器IP:/var/lib/mongodb/-a保留权限,-v显示进度,--progress显示传输详情)。
  • 更新目标配置:检查目标服务器的/etc/mongod.conf文件,确保storage.dbPath指向正确的数据目录(如/var/lib/mongodb)。
  • 启动目标服务:执行sudo systemctl start mongod启动MongoDB服务。
    适用场景:同版本迁移、数据量极大(如TB级)、需要快速迁移的场景。
    注意事项:迁移前需停止源服务以避免数据不一致;同步完成后需检查数据目录权限(chown -R mongodb:mongodb /var/lib/mongodb)。

5. 增量迁移(处理大规模数据或持续写入)
若数据量极大或源数据库仍在写入,可采用“全量+增量”的分阶段迁移策略。操作步骤如下:

  • 全量备份:使用mongodump导出源数据库的全量数据(如mongodump --host=源主机 --db=数据库名 --out=/全量备份)。
  • 传输并恢复全量数据:将全量备份传输到目标服务器,使用mongorestore恢复(如mongorestore --host=目标主机 --db=数据库名 /全量备份/数据库名)。
  • 增量备份与恢复:在全量备份后,定期执行mongodump导出自上次备份以来的增量数据(如mongodump --host=源主机 --db=数据库名 --out=/增量备份 --query '{"lastmod": {"$gt": ISODate("2025-10-01T00:00:00Z")}}'),并传输到目标服务器恢复。
  • 最终同步:停止源服务,将最后的增量数据同步到目标服务器,切换服务。
    适用场景:大规模数据(TB级)、源数据库持续写入、需要减少停机时间的场景。

6. 迁移前的准备工作(避免踩坑)

  • 备份数据:无论使用哪种迁移方案,均需提前备份源数据(如mongodump或复制数据目录),防止迁移过程中数据丢失。
  • 检查兼容性:确认源和目标MongoDB版本的兼容性(如3.6→4.0需注意索引变更,4.0→5.0需升级存储引擎),避免因版本不兼容导致数据错误。
  • 处理特定版本差异:如MongoDB 4.0引入了文档验证,5.0升级了WiredTiger存储引擎,需提前调整数据模型(如删除不支持的索引、转换数据类型)。
  • 更新应用程序配置:迁移完成后,修改应用程序的数据库连接字符串(如mongodb://目标主机:27017/数据库名),确保应用程序能正常连接目标数据库。

7. 迁移后的验证(确保数据一致性)

  • 数据完整性检查:在目标服务器上执行db.collection.countDocuments(),与源服务器的集合数量对比;使用db.collection.find().limit(10)抽查数据是否一致。
  • 功能测试:运行应用程序的核心功能(如查询、插入、更新),确保数据操作正常。
  • 性能测试:使用mongostat监控目标服务器的性能指标(如QPS、延迟),确保迁移后性能符合预期。

0