分享至

MongoDB 資料庫工具與公用程式簡介

無論您使用哪種資料庫,都可能有可用的資料庫工具來協助您使用資料庫。資料庫工具是工具、公用程式和輔助程式的統稱,它們可以讓執行資料庫管理任務變得更輕鬆。

雖然不是必要使用,但資料庫工具與公用程式可以節省您的時間和精力。MongoDB 具有第一方集合,其中包含非常實用且值得了解的命令列公用程式,您可以在部署中使用這些公用程式。在本文中,我們將簡要提及安裝,然後介紹最實用的公用程式。

MongoDB 將其工具與公用程式分為四個類別:二進制匯入/匯出、資料匯入/匯出、診斷工具和 GridFS,因此我們將相應地介紹它們。

安裝 MongoDB 資料庫工具

從 MongoDB 4.4 版開始,MongoDB 資料庫工具與 MongoDB 伺服器的下載分開發布。與先前這些工具與各自的 MongoDB 伺服器版本一起發布的實例相比,它們也以自己的版本控制進行維護。

我們不會涵蓋安裝步驟,但如果您使用 MongoDB 4.4 或更高版本,則以下內容將引導您完成每個作業系統的安裝過程。

二進制匯入/匯出

mongodump

mongodump 是一個公用程式,用於建立資料庫內容的二進制匯出。此公用程式可以從獨立、副本集和分片叢集部署匯出資料。匯出可以從 mongodmongos 實例執行。務必注意,mongodump 需要從系統命令列執行,而不是 mongo shell。

mongodump 可以與 mongorestore(即將介紹)搭配使用,以構成完整備份與復原策略的一部分。mongodump 也可以根據集合、查詢或從生產環境同步到開發環境來產生部分備份。

雖然對於較小規模部署來說是一種可行的策略,但對於較大型 MongoDB 部署,應改用其他備份策略來取代 mongodump。由於 mongodump 透過與正在運行的 mongod 實例互動來運作,因此可能會影響您正在運行的資料庫效能。除了產生流量之外,該工具還強制資料庫透過記憶體讀取所有資料。當 MongoDB 需要讀取不常存取的資料時,這可能會佔用更常存取的資料資源,從而降低常規工作負載的效能。

mongodump 的基本語法在系統命令列中如下所示

mongodump <options> <connection-string>

mongodump 將產生檔案並將其儲存在 dump/ 目錄中,供您存取。您可以在 MongoDB 官方文件中閱讀更多關於連線字串設定其他選項的資訊。

mongorestore

mongorestoremongodump 的夥伴工具,適用於為小型部署建立充分的備份策略。mongorestore 程式會從二進制資料庫傾印(mongodump 檔案)或標準輸入將資料載入到 mongodmongos 實例中。

mongodump 類似,mongorestore 需要在系統命令列中執行,而不是在 mongo shell 中執行。它也針對正在運行的 mongod 實例運作,因此對於超出小型部署規模的任何還原策略來說,效率不佳。

mongorestore 的基本語法如下所示

mongorestore <options> <connection-string> <directory or file to restore>

可以新增 mongorestore其他選項,以滿足您的備份策略或獨立匯入可能需要的任何需求。

bsondump

bsondump 是一種工具,用於讀取使用 mongodump 產生的二進制檔案。bsondump 公用程式會將 BSON 檔案轉換為人類可讀的格式,包括 JSON。

bsondump 必須在命令列中運行,它是一種用於檢查 BSON 檔案的診斷工具。不適用於資料擷取或其他應用程式用途。

bsondump 使用Extended JSON v2.0 (Canonical Mode) 來格式化其資料。預設情況下,bsondump 會寫入標準輸出。若要建立 JSON 檔案,您可以使用以下 --outFile 選項

bsondump --outFile=file.json file.bson

--outFile 指定 bsondump 應將其輸出 JSON 資料寫入的檔案路徑。file.bson 指定要轉換的檔案。MongoDB 文件中深入提供了其他選項。

對於任何需要讓檔案變得人類可讀的 mongodump 除錯任務,bsondump 特別有用。例如,您可以執行以下操作來產生除錯輸出

bsondump --type=debug file.bson

資料匯入/匯出

mongoexport

mongoexport 工具也可以從 MongoDB 實例匯出資料。但是,此命令列工具會產生資料的 JSON 或 CSV 匯出,而不是像 mongodump 這樣的二進制傾印,使其成為較慢的操作。

為了使用 mongoexport,使用者需要在目標資料庫上至少具有讀取權限。它們可以連線到 mongodmongos 實例。mongoexport 的基本語法如下所示

mongoexport --collection=<coll> <options> <connection-string>

您可以根據連線需求和使用案例合併許多其他選項。由於 mongoexport 會產生 JSON 或 CSV 匯出,為了保留所有豐富的 BSON 資料類型以進行完整實例備份,您需要指定 Extended JSON v2.0 (Canonical mode)

這是一個重要的選項,因為 JSON 只能直接表示 BSON 支援的某些類型。因此,您必須附加 --jsonFormat 選項並設定為 canonical。範例可能如下所示

mongoexport --jsonFormat=canonical --collection=<coll> <connection-string>

mongodump 類似,mongoexport 具有夥伴匯入工具,能夠呈現匯出的檔案以匯入到 MongoDB 中。

mongoimport

mongoimport 工具會匯入從 Extended JSON(具有保留 BSON 資料類型的 mongoexport 檔案)、CSV 或 TSV 匯出所擷取的資料,這些匯出是從 mongoexport 工具建立的。透過正確的格式設定,mongoimport 也可以從第三方匯出工具匯入檔案。

mongoimport 工具只能從系統命令列使用,而不能從 mongo shell 使用。它具有以下基本語法

mongoimport <options> <connection> <file>

mongoimport 從使用 mongoexport 建立的備份還原資料庫。因此,兩者的許多引數都相同。最佳實務是在將這些工具一起用於備份策略時,它們應為相同版本。

mongoimport 也僅支援 UTF-8 編碼的資料檔案。如果您嘗試使用任何其他編碼匯入,都會導致錯誤。詳盡的其他選項設定清單可以在 MongoDB 官方文件中找到。

診斷工具

mongostat

MongoDB 也提供實用工具,用於收集有關您的任何資料庫實例深入資訊。其中一個工具是 mongostatmongostat 是一種診斷工具,可快速概述目前正在運行的 mongodmongos 實例的狀態。如果您熟悉 UNIX/Linux,會覺得這與 vmstat 類似,只是在 MongoDB 環境中。

mongostat 公用程式只能從系統命令列運行,而不能從 mongo shell 運行。為了連線到 mongod 實例並使用 mongostat 工具,使用者必須在叢集上具有 serverStatus 權限動作。MongoDB 具有一個稱為 clusterMonitor 的內建角色,可提供此功能。也可以自訂其他角色以利用 mongostat

mongostat 的基本語法如下所示

mongostat <options> <connection-string> <polling interval in seconds>

預設情況下,mongostat 報告的值反映 1 秒期間內的操作。但是,您可以使用 <sleeptime> 引數調整此值。將此時間週期調整為大於 1 秒的任何值,都會平均統計數據以反映每秒的平均操作次數。

mongostat 傳回許多欄位,並且可以自訂為僅傳回感興趣的欄位。另一個重要的選項是 --rowcount=<number>, -n=<number>。此選項限制 mongostat 傳回的列數。傳回欄位的一些範例如下

  • inserts:每秒插入資料庫的物件數量。
  • query:每秒查詢操作次數。
  • vsize:上次 mongostat 呼叫時,程序使用的虛擬記憶體量(以 MB 為單位)。
  • repl:成員的複寫狀態。

MongoDB 官方文件中涵蓋了更多欄位,但這幾個範例示範了 mongostat 公用程式從系統命令列進行資料庫監控的功能。

mongotop

雖然 mongostat 是一種在資料庫層級進行監控的實用工具,但 mongotop 是一種用於提供每個集合層級統計數據的實用工具。具體來說,mongotop 提供了一種方法來追蹤 mongod 實例每秒花費在讀取和寫入資料的時間量。

mongotop 只能從命令列運行,其基本語法如下所示

mongotop <options> <connection-string> <polling interval in seconds>

mongotop 傳回以下欄位

  • mongotop.ns:這是資料庫命名空間,是資料庫名稱和集合的組合
  • mongotop.total:提供 mongod 花費在命名空間上操作的總時間量。
  • mongotop.read:提供 mongod 花費在命名空間上執行讀取操作的時間量。
  • mongotop.write:提供 mongod 花費在命名空間上執行寫入操作的時間量。
  • mongotop.<timestamp>:提供傳回資料的時間戳記。

mongotop 允許資料庫使用者監控資料庫中集合的流量。您將能夠形成集合在讀取或寫入操作中遇到高峰或低谷的影像。

GridFS

GridFS 是在 MongoDB 資料庫中儲存大型檔案的慣例。所有 MongoDB 官方驅動程式都支援此慣例,以下 mongofiles 程式也是如此。它充當儲存和復原大型檔案(例如影片、音訊和影像)的抽象層。

mongofiles

mongofiles 工具可以從系統命令列操作儲存在 MongoDB 實例中的檔案,作為 GridFS 物件。這特別有用,因為它提供了儲存在檔案系統中的物件與 GridFS 之間的介面。

mongofiles 的基本語法如下

mongofiles <options> <connection-string> <command> <filename or _id>

<command> 元件決定您希望 mongofiles 公用程式執行的動作。一些命令範例如下

  • list <prefix>:列出 GridFS 儲存區中的檔案。<prefix> 部分選擇性地將傳回項目的清單限制為以該字元串開頭的檔案。
  • search <string>:列出 GridFS 儲存區中名稱符合 <string> 任何部分的檔案。
  • delete <filename>:從 GridFS 儲存區刪除指定的檔案。

mongofiles 在您的本機檔案系統與 GridFS 之間提供互連性,可透過系統命令列輕鬆導航。這使得檔案管理和檔案儲存對於資料庫管理員來說更簡單,並增強資料處理能力。

結論

在本文中,我們討論了一些 MongoDB 資料庫工具和公用程式,這些工具和公用程式透過命令列使重要的資料庫任務更簡單。工具可能對於日常資料庫管理操作至關重要,或者僅在臨時需要時才使用。

無論是匯出/匯入資料以維護健全的備份/復原策略、在資料庫或集合層級進行診斷監控,或是簡化檔案系統之間用於檔案管理的介面,MongoDB 都能滿足您的需求。

關於作者
Alex Emerich

Alex Emerich

Alex 是典型的賞鳥、熱愛嘻哈的書蟲,也喜歡撰寫有關資料庫的文章。他目前居住在柏林,在那裡可以看到他像李奧波德·布魯姆一樣漫無目的地在城市中漫步。