MongoDB 資料庫工具與實用程式簡介
無論您使用哪種資料庫,都可能有可用的資料庫工具來幫助您操作資料庫。資料庫工具是工具、實用程式和助手的統稱,它們可以簡化資料庫管理任務。
雖然並非必需,但資料庫工具和實用程式可以為您節省時間和精力。MongoDB 提供了一套官方的、非常實用且值得了解的命令列實用程式,您可以在部署中使用它們。在本文中,我們將簡要提及安裝,然後介紹最常用的實用程式。
MongoDB 將其工具和實用程式分為四個類別:二進位制匯入/匯出、資料匯入/匯出、診斷工具和 GridFS,我們將依次介紹它們。
安裝 MongoDB 資料庫工具
從 MongoDB 4.4 版本開始,MongoDB 資料庫工具與 MongoDB 伺服器的下載是分開發布的。與之前這些工具隨各自 MongoDB 伺服器版本一同釋出的情況相比,它們現在也有獨立的版本控制。
我們不會涵蓋安裝步驟,但如果您正在使用 MongoDB 4.4 或更高版本,以下內容將引導您完成每個作業系統的安裝過程。
如果您正在使用 MongoDB,請檢視 Prisma 的 MongoDB 聯結器!您可以使用 Prisma Client 自信地管理生產環境中的 MongoDB 資料庫。
要開始使用 MongoDB 和 Prisma,請檢視我們的從零開始指南,或者瞭解如何將其新增到現有專案。
二進位制匯入/匯出
mongodump
`mongodump` 是一個用於建立資料庫內容二進位制匯出的實用程式。該實用程式可以從獨立例項、副本集和分片叢集部署中匯出資料。匯出可以從 `mongod` 或 `mongos` 例項執行。需要注意的是,`mongodump` 必須從系統命令列執行,而不是從 `mongo` shell 執行。
`mongodump` 可以與 `mongorestore`(稍後介紹)配合使用,構成完整的備份和恢復策略的一部分。`mongodump` 還可以根據集合、查詢或從生產環境同步到開發環境來生成部分備份。
雖然 `mongodump` 對於小型部署來說是一種可行的策略,但對於大型 MongoDB 部署來說,應考慮其他備份策略。因為 `mongodump` 透過與正在執行的 `mongod` 例項互動來操作,它可能會影響您正在執行的資料庫的效能。除了產生流量,該工具還會強制資料庫透過記憶體讀取所有資料。當 MongoDB 需要讀取不常訪問的資料時,這可能會佔用更常訪問的資料的資源,從而降低常規工作負載的效能。
`mongodump` 的基本語法在系統命令列中如下所示
mongodump <options> <connection-string>
`mongodump` 將生成一個檔案並將其儲存在 `dump/` 目錄中供您訪問。您可以在 MongoDB 官方文件中閱讀更多關於連線字串配置和更多選項的資訊。
mongorestore
`mongorestore` 是 `mongodump` 的配套工具,用於為小型部署建立足夠的備份策略。`mongorestore` 程式將資料從二進位制資料庫轉儲(`mongodump` 檔案)或標準輸入載入到 `mongod` 或 `mongos` 例項中。
與 `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 文件中深入瞭解。
`bsondump` 對於任何需要將檔案轉換為人類可讀格式的 `mongodump` 除錯任務特別有用。例如,您可以執行以下操作來生成除錯輸出
bsondump --type=debug file.bson
資料匯入/匯出
mongoexport
`mongoexport` 工具也可以從 MongoDB 例項匯出資料。然而,這個命令列工具生成的是 JSON 或 CSV 格式的資料匯出,而不是像 `mongodump` 那樣的二進位制轉儲,因此操作速度較慢。
為了使用 `mongoexport`,使用者至少需要對目標資料庫擁有讀取許可權。他們可以連線到 `mongod` 或 `mongos` 例項。`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 還有一些有用的工具,用於獲取關於您的任何資料庫例項的洞察。其中一個工具是 `mongostat`。`mongostat` 是一個診斷工具,提供當前正在執行的 `mongod` 或 `mongos` 例項的狀態快速概覽。如果您熟悉 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` 呼叫時,程序使用的虛擬記憶體量(以兆位元組為單位)。
- `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 都為您提供瞭解決方案。
如果您正在使用 MongoDB,請檢視 Prisma 的 MongoDB 聯結器!您可以使用 Prisma Client 自信地管理生產環境中的 MongoDB 資料庫。
要開始使用 MongoDB 和 Prisma,請檢視我們的從零開始指南,或者瞭解如何將其新增到現有專案。
