分享到

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(规范模式)来格式化其数据。默认情况下,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 数据类型以进行完整实例备份,你需要指定Extended JSON v2.0(规范模式)

这是一个重要的选项,需要了解,因为 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 调用时进程使用的虚拟内存量(以兆字节为单位)。
  • 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 是典型的观鸟、热爱嘻哈音乐的书虫,也喜欢撰写有关数据库的文章。他目前居住在柏林,在那里可以看到他像利奥波德·布卢姆一样漫无目的地走在城市中。