測試驗證三種備份/遷移方案:文件級拷貝 (fsync 鎖)、二進制邏輯備份 (mongodump/restore)、文本導入導出 (mongoimport/export)。文件系統快照法還原失敗,暫不採用。
# 1. 鎖定寫入、刷盤
> db.fsyncLock()
# 2. 打包數據目錄
tar -czf /root/mongodb_20150505.tar.gz /var/lib/mongo
# 3. 解鎖
> db.fsyncUnlock()
# 還原:停服務 → 刪舊文件 → 解壓 → 刪 mongod.lock → 啟動
service mongod stop
rm -rf /var/lib/mongo/*
tar -xzf /root/mongodb_20150505.tar.gz -C /
rm -f /var/lib/mongo/mongod.lock
service mongod start
缺點:需停寫、停服務、風險大、跨版本/存儲引擎不兼容。
# 全量備份 (當前目錄生成 dump/)
mongodump
# 全量還原
mongorestore /root/dump
# 單庫還原
mongorestore --db test /root/dump/test
# 指定主機/端口/認證/輸出目錄
mongodump --host localhost --port 27017 --out /root/mongodump-2015-05-05
mongorestore --port 27017 --db test /root/mongodump-2015-05-05/test
# 遠程備份/還原 (含用戶名密碼)
mongodump --host mongodb1.example.net --port 3017 -u user -p pass --out /opt/backup/mongodump-2013-10-24
mongorestore --host mongodb1.example.net --port 3017 -u user -p pass /opt/backup/mongodump-2013-10-24
優勢:在線熱備、跨版本兼容、支援壓縮/並行/增量 (oplogReplay)、細粒度庫/集合控制。
# 導出 CSV 指定欄位
mongoexport --db test --collection tab --type=csv --fields _id,id,size --out /root/test_tab.csv
# 導出 JSON
mongoexport --db test --collection tab --type=json --out /root/test_tab.json
# 查詢導出 (排序/分頁)
mongoexport -d test -c tab --sort '{name:-1}' --limit 2 --skip 2 --out /root/test_tab.json
# 導入 JSON
mongoimport --db mydb --collection tab --file /root/test_tab.json
# 導入 CSV (首行表頭)
mongoimport --db mydb --collection tab --type csv --headerline --file /root/test_tab.csv
注意:JSON 導入會保留 _id,重複鍵報錯;CSV 需 --headerline 或 --fields 指定欄位序。
--drop:導入前刪除集合。--upsert:插入或更新 (需 --upsertFields 指定查詢鍵)。--numParallelCollections / --numInsertionWorkers:並行度調優。--writeConcern:寫入關注級別 (預設 majority)。--oplogReplay:時間點恢復 (需備份含 oplog)。| 場景 | 推薦工具 |
|---|---|
| 生產定期備份/災難恢復 | mongodump + 壓縮 + 異地存儲 |
| 叢集遷移/升級 | mongodump/restore (含 oplogReplay) |
| 小量數據導出分析/交換 | mongoexport (JSON/CSV) |
| 異構數據導入 (MySQL→Mongo) | mongoimport (CSV) |
| 極速冷備份 (可停服務) | 文件拷貝 + LVM 快照 |