分享到

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 使用 扩展 JSON v2.0(规范模式) 来格式化其数据。默认情况下,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,用户至少需要目标数据库的读取权限。他们可以连接到 mongodmongos 实例。 mongoexport 的基本语法如下

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

根据您的连接需求和用例,您可以合并许多 其他选项。因为 mongoexport 生成 JSON 或 CSV 导出,所以为了保留完整的实例备份的所有丰富的 BSON 数据类型,您需要指定 扩展 JSON v2.0(规范模式)

这是一个重要的选项,因为 JSON 只能直接表示 BSON 支持的一些类型。因此,您必须附加 --jsonFormat 选项并将其设置为 canonical。例如,如下所示

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

mongodump 一样,mongoexport 也有一个配套的导入工具,可以呈现已导出的文件以导入 MongoDB。

mongoimport

mongoimport 工具导入从扩展 JSON(mongoexport 文件,保留 BSON 数据类型)、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 调用时使用的虚拟内存量(以兆字节为单位)。
  • 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 是一个典型的喜欢观鸟、嘻哈音乐和读书的书虫,他也喜欢写关于数据库的文章。他现在住在柏林,在那里他经常像利奥波德·布鲁姆一样漫无目的地在城市里闲逛。