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,请查看我们的从零开始指南,或者了解如何将其添加到现有项目。