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、延遲),確保遷移后性能符合預期。