HOWTO · MongoDB
建立資料庫的 MongoDB 轉儲
說明如何使用 mongodump 傾印 MongoDB 資料庫或集合、選擇目錄或封存檔格式,並使用 mongorestore 還原資料。
本頁內容
使用 mongodump,即可在系統命令列匯出單一 MongoDB 資料庫或所有資料庫、選擇目錄或封存檔格式,並使用 mongorestore 還原結果。以下命令以本機 MongoDB 伺服器為例;若伺服器有需要,請加入連線與驗證選項。
mongodump 會建立什麼,以及如何執行
mongodump 會從正在執行的 MongoDB 部署讀取資料,並寫出二進位匯出檔。它是 Database Tools 的命令列工具,應在終端機中執行,而不是在 MongoDB Shell 裡執行。常見的呼叫形式如下:mongodump [options] [connection-string]。
轉儲內容包含匯出集合的 BSON 資料檔與中繼資料檔,供 mongorestore 讀取;它不是人類可直接閱讀的 JSON 匯出檔。若工作明確需要 JSON 或 CSV 資料,請改用 mongoexport。
你可以使用 URI 連線,也可以使用個別旗標。URI 可包含主機、連接埠和資料庫路徑;不要將真實密碼放在會儲存於 Shell 歷程記錄或會分享出去的命令中。使用個別旗標時,可用 --username、--password 和 --authenticationDatabase。如果帳戶是在 admin 中定義,即使要轉儲的資料位於其他資料庫,也要將驗證資料庫設為 admin。你可以省略 --password,讓工具提示輸入密碼。請確認帳戶具有讀取目標資料的權限。
執行以下範例:
本節中的程式碼以及顯示的標籤或輸出仍為英文。
database = "inventory"
destination = "backup"
print(f"mongodump --db={database} --out={destination}")
mongodump --db=inventory --out=backup
這段 Python 程式碼會印出一個連線至本機伺服器的命令;它不會連線到 MongoDB,也不會建立轉儲檔。程式碼與輸出區塊中的命令文字和標籤維持英文。請在已安裝 MongoDB Database Tools 且能連線至伺服器的終端機中執行印出的命令。
轉儲單一資料庫
若要將單一資料庫轉儲至目錄,請使用 --db 指定資料庫名稱,並使用 --out 選擇上層目錄。例如,mongodump --db=inventory --out=backup 會將資料庫寫入 backup 底下。預設不必指定 --out:工具會在目前工作目錄中使用名為 dump 的目錄。
資料庫名稱為 inventory 時,常見的目錄結構是 backup/inventory/,其中每個集合各有一個 .bson 檔,以及相對應的 .metadata.json 檔。例如,名為 products 的集合會以 backup/inventory/products.bson 和 backup/inventory/products.metadata.json 表示。BSON 檔包含集合資料;中繼資料檔可能包含集合選項與索引定義。
若只要轉儲單一集合,請在 --db 旁加上 --collection,例如 mongodump --db=inventory --collection=products --out=backup。結果仍會放在資料庫目錄底下。若要在另一次執行中納入其他集合,請選擇不同的目的地,或先檢查現有目的地;不要假設重複執行會安全地附加內容或保留現有檔案。
若使用 URI 連線,請搭配相同的範圍與輸出選項,例如 mongodump --uri="mongodb://db.example.test:27017/" --db=inventory --out=backup。請將主機替換為你的伺服器,並依照環境核准的憑證處理方式加入驗證資訊。--db 指定轉儲範圍;--authenticationDatabase 則指定 MongoDB 檢查使用者憑證的位置。
轉儲所有資料庫
若要納入已連線帳戶可存取的所有可轉儲資料庫,請省略 --db 和任何集合篩選條件。即使轉儲所有資料庫,mongodump 仍會排除 local 資料庫。以本機伺服器為例,mongodump --archive=all-databases.archive 會將轉儲寫入單一封存檔。若使用驗證,請加入適當的使用者名稱和驗證資料庫,並安全地提供密碼,或讓工具提示輸入密碼。
封存檔方便以單一檔案移動。若要還原,請將相同的封存檔路徑與 --archive 一起傳給 mongorestore。--archive 和 --out 會選擇不同的輸出格式,不能同時使用:目錄樹請使用 --out,單一封存檔請使用 --archive。像 --db=inventory 這類僅限單一資料庫的篩選條件會改變轉儲範圍,因此若目標是轉儲所有資料庫,就應省略它。
使用 mongorestore 還原轉儲
若要將目錄轉儲還原至 MongoDB 部署,請將轉儲目錄指定給 mongorestore,例如 mongorestore --uri="mongodb://localhost:27017/" backup/。若使用預設目錄,請輸入 mongorestore dump/。目錄結構會提供來源資料庫與集合名稱。若要連線至其他位置,請加入 URI 或 --host、--port、--username 和 --authenticationDatabase 等連線旗標。
還原封存檔時,請使用封存檔選項,而不是目錄路徑:mongorestore --archive=all-databases.archive。視需要加入目的地連線選項。對重要資料執行命令前,請先還原至測試環境或預定目的地,並檢查所選的命名空間。
若只要從目錄轉儲還原特定集合,請使用 --nsInclude 搭配命名空間模式。例如,mongorestore --nsInclude="inventory.products" backup/ 會選取 inventory 資料庫中的 products 集合。inventory.* 這類模式則會選取該資料庫中的所有集合。若來源與目的地名稱不同,請搭配 --nsInclude 使用 --nsFrom 和 --nsTo 等命名空間對應選項。
mongorestore 會將文件插入目標集合。若目標已有相同 _id 的文件,可能會發生重複索引鍵錯誤;預設操作不會先清空目標集合。--drop 選項會在還原前刪除每個目標集合,因此只有在確定要取代這些集合時才使用。還原可能在回報錯誤的同時部分完成,請檢查終端機訊息,並驗證還原後的集合。
選擇輸出格式並驗證備份
若要將集合檔案存放在方便瀏覽的目錄樹中,請選擇 --out;若單一檔案較方便移動,則選擇 --archive。使用 --db 轉儲單一資料庫;若只要單一集合,再加上 --collection;若要轉儲所有資料庫,則省略這兩個篩選條件。還原時,請讓 mongorestore 使用相符的目錄或封存檔格式;若只還原部分轉儲內容,則套用命名空間篩選條件。
使用轉儲檔前,請確認目的地存在,且其中包含預期的資料庫目錄或封存檔。若是目錄轉儲,請確認其中有預期集合的 BSON 檔和中繼資料檔。若是封存檔,請確認檔案已建立且大小合理、非零。接著,將它還原至安全的目標,並確認預期的資料庫與集合都可使用。檔案存在本身並不能證明所有預期集合都已納入,也不能保證還原一定會成功。