Linux下MongoDB數據遷移的常見方法
適用場景:需要遷移整個數據庫或大量集合,追求遷移效率的場景。
操作步驟:
mongodump
工具導出數據為BSON格式(MongoDB原生二進制格式),命令示例:mongodump --host 源服務器IP --port 27017 --db 目標數據庫名 --out /path/to/backup目錄
說明:--host
和--port
指定源MongoDB地址;--db
指定要備份的數據庫;--out
指定備份文件存儲路徑。scp
(安全拷貝)工具將備份目錄傳輸到目標服務器,命令示例:scp -r /path/to/backup 目標服務器用戶名@目標服務器IP:/path/to/destination目錄
mongorestore
工具將備份數據導入目標MongoDB,命令示例:mongorestore --host 目標服務器IP --port 27017 --db 目標數據庫名 /path/to/destination/備份目錄/目標數據庫名
說明:若目標數據庫已存在,mongorestore
會合并數據(可通過--drop
參數先刪除目標數據庫,謹慎使用)。適用場景:僅需遷移單個集合,或需要將數據轉換為JSON/CSV格式(便于跨系統處理)的場景。
操作步驟:
mongoexport
工具導出指定集合為JSON或CSV格式,命令示例(導出為JSON):mongoexport --host 源服務器IP --port 27017 --db 目標數據庫名 --collection 目標集合名 --out /path/to/exported_file.json
說明:--collection
指定要導出的集合;--out
指定導出文件路徑。若需導出為CSV,需添加--type=csv
和--fields 字段1,字段2
參數。scp
工具將導出文件傳輸到目標服務器,命令同步驟二中的傳輸命令。mongoimport
工具將數據導入目標MongoDB,命令示例(導入JSON):mongoimport --host 目標服務器IP --port 27017 --db 目標數據庫名 --collection 目標集合名 --file /path/to/exported_file.json
說明:若目標集合已存在,mongoimport
會追加數據(可通過--drop
參數先刪除目標集合)。適用場景:需要實時同步數據,或遷移過程中仍有數據寫入的場景(如生產環境熱遷移)。
前提條件:源服務器和目標服務器的MongoDB均配置為復制集(Replica Set),確保數據一致性。
操作步驟:
mongod.conf
文件,添加復制集配置(如replication: replSetName: "rs0"
),然后重啟MongoDB服務。rsync
工具同步源服務器的MongoDB數據目錄(默認/var/lib/mongodb
或/data/db
)到目標服務器,命令示例:rsync -avz --delete --progress 源服務器用戶名@源服務器IP:/var/lib/mongodb/ 目標服務器用戶名@目標服務器IP:/var/lib/mongodb/
說明:-avz
表示歸檔模式、顯示進度、壓縮傳輸;--delete
表示刪除目標目錄中源目錄不存在的文件(保持完全同步);--progress
顯示傳輸進度。sudo systemctl restart mongod
驗證:通過mongo
shell連接目標服務器,檢查數據是否同步。backup
、restore
角色,或root
用戶)。mongo
shell連接目標服務器,執行查詢語句(如db.collection.find().count()
)驗證數據完整性和一致性。