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
还可以基于集合、查询或从生产环境同步到开发环境来生成部分备份。
虽然对于较小的部署来说是一种可行的策略,但对于较大的 MongoDB 部署,应将 mongodump
搁置,转而采用另一种备份策略。由于 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(规范模式)来格式化其数据。默认情况下,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(规范模式)。
这是一个重要的选项,需要了解,因为 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,请查看我们的从头开始入门指南或如何添加到现有项目。