1. mongodump/mongorestore工具(全量/跨版本迁移首选)
这是MongoDB官方推荐的通用迁移方案,通过导出BSON格式的二进制数据实现高效迁移。操作步骤如下:
mongodump --host=源主机 --port=源端口 --db=数据库名 --out=./backup,将指定数据库导出到本地backup目录(BSON格式保留索引、数据类型等完整信息)。scp -r ./backup user@目标服务器IP:/目标路径将备份目录传输到目标服务器。mongorestore --host=目标主机 --port=目标端口 --db=数据库名 /目标路径/backup/数据库名,将数据导入目标MongoDB实例。--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,自动识别表头)。3. 副本集扩展迁移(大规模生产环境最小化停机)
对于大规模数据或生产环境,可通过将目标服务器添加为源副本集的次要节点,利用MongoDB的oplog实现实时同步,最后切换为主节点。操作步骤如下:
mongod.conf文件(设置replication.replSetName与源集群一致,如rs0)。rs.add("目标服务器IP:端口"),目标服务器开始同步数据。rs.status(),确认目标节点的stateStr为SECONDARY且optimeDate与Primary一致。rs.reconfig(cfg, {force: true}),需谨慎使用force参数)。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服务。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")}}'),并传输到目标服务器恢复。6. 迁移前的准备工作(避免踩坑)
mongodump或复制数据目录),防止迁移过程中数据丢失。mongodb://目标主机:27017/数据库名),确保应用程序能正常连接目标数据库。7. 迁移后的验证(确保数据一致性)
db.collection.countDocuments(),与源服务器的集合数量对比;使用db.collection.find().limit(10)抽查数据是否一致。mongostat监控目标服务器的性能指标(如QPS、延迟),确保迁移后性能符合预期。