Docs 菜单

Docs 主页开发应用程序MongoDB Manual

管理 mongod进程

在此页面上

  • 启动 mongod 进程
  • 停止 mongod 进程
  • mongod 进程进行故障排除
  • 停止副本集

MongoDB 作为标准程序运行。 您可以通过发出mongod命令并指定选项,从命令行启动 MongoDB。 有关选项列表,请参阅mongod参考文档。 MongoDB 还可以作为 Windows 服务运行。 有关详细信息,请参阅将MongoDB Community Edition作为 Windows 服务启动。 要安装 MongoDB,请参阅安装 MongoDB。

以下示例假设包含mongod进程的目录位于您的系统路径中。 mongod进程是在单个服务器上运行的主要数据库进程。从客户端的角度来看, mongos提供与mongod等效的连贯 MongoDB 接口。 mongosh二进制文件提供管理 Shell。

本文档讨论 mongod 进程,不过某些部分可能也适用于 mongos 实例。

默认情况下,MongoDB 在端口 27017 上监听来自客户端的连接,并将数据存储在 /data/db 目录中。

在 Windows 上,此路径位于启动 MongoDB 的驱动器上。例如,如果您未指定 --dbpath,则在 C:\ 驱动上启动 MongoDB Server 会将所有数据文件存储在 C:\data\db 中。

要全部使用默认设置启动 MongoDB,请在操作系统 Shell 中执行以下命令:

mongod

如果希望 mongod 将数据文件存储在 /data/db 以外的路径,可以指定一个dbPath。在您启动 mongod 之前,dbPath 必须存在。如果不存在,请创建目录和权限,以便 mongod 可以向该路径读取和写入数据。有关权限的更多信息,请参阅安全操作文档。

要指定 dbPathmongod 用作数据目录,请使用 --dbpath 选项。以下调用将启动一个 mongod 实例,并将数据存储于 /srv/mongodb 路径

mongod --dbpath /srv/mongodb/

注意

mongod 包括全时诊断数据捕获机制,以协助 MongoDB 工程师对部署进行故障排除。如果该线程失败,它将终止原始进程。为了避免出现最常见的故障,请确认运行该进程的用户有权创建 FTDC diagnostic.data 目录。对于 mongod,该目录位于 storage.dbPath 内。对于 mongos,该目录与 systemLog.path 并行。

每次只有一个进程可以监听网络接口连接。如果在一台计算机上运行多个 mongod 进程,或有其他进程必须使用该端口,则必须为每个进程分配不同的端口来监听客户端连接。

要指定 mongod 的端口,请在命令行上使用 --port 选项。以下命令在端口 12345 上启动 mongod 侦听:

mongod --port 12345

为避免混淆,请尽可能使用默认端口号。

mongod进程作为守护进程运行(即fork),将其输出写入日志文件,请使用 --fork--logpath 选项。 您必须创建日志目录;但是,如果不存在,mongod 会创建日志文件。

以下命令将 mongod 作为守护进程启动,并将日志输出记录到 /var/log/mongodb/mongod.log

mongod --fork --logpath /var/log/mongodb/mongod.log

有关常见使用案例的常见配置和部署的概述,请参阅运行时数据库配置

在彻底关闭时,mongod 会完成所有待处理的操作,将所有数据刷新到数据文件,并关闭所有数据文件。 其他关闭不彻底,可能会损害数据文件的有效性。

要确保完全关闭,请始终使用以下方法之一关闭 mongod 实例:

使用mongod 方法从mongosh db.shutdownServer()关闭 ,如下所示:

use admin
db.shutdownServer()

初始化脚本中调用相同的方法可实现相同的结果。

对于启用 authorization 的系统,用户只有在向 admin 数据库进行身份验证时才能发出 db.shutdownServer(),或者在未启用身份验证的系统上通过本地主机接口发出。

仅在 Linux 上支持。在命令行中,使用 --shutdown 选项关闭 mongod

mongod --shutdown

以交互模式运行 mongod 实例时(即没有 --fork),则发出 Control-C 以执行彻底关机。

仅在 Linux 和 macOS 上支持。在命令行中,可通过以下命令关闭特定的 mongod 实例:

kill <mongod process ID>
kill -2 <mongod process ID>

如果副本集主节点收到 SIGTERM,则主节点会在关闭之前尝试降级。

  • 如果成功降级,则该实例在随后的新主节点选举中不会进行投票,而是继续其关闭过程。

  • 如果降级失败,该实例将继续其关闭过程。

警告

切勿使用 kill -9(即 SIGKILL)终止 mongod 实例。

对于在 Linux 上运行的 MongoDB 实例:

  • mongodmongos 进程收到 SIGUSR2 信号时,回溯详细信息将添加到每个进程线程的日志中。

  • 回溯详细信息显示该进程的函数调用,可用于诊断并在需要时提供给 MongoDB 支持。

回溯功能可用于以下架构:

  • x86_64

  • arm64 (从 MongoDB 5 . 0 . 10和6 . 0开始)

要向运行中的 mongod 进程发出 SIGUSR2 信号,请使用以下命令:

kill -SIGUSR2 <mongod process ID>

生成的回溯数据将按照 --logpath 的配置,写入 mongod 日志文件。

如果 mongod副本集中的主节点,则此 mongod 实例的关闭过程包括以下步骤:

  1. 检查从节点的最新情况。

  2. 如果在主节点的 10 秒内没有从节点,mongod 将返回一条消息,表明不会关闭。您可以向 shutdown 命令传递 timeoutSecs 参数,令主节点等待从节点赶上。

  3. 如果存在一个从节点,其数据状态落后于主节点不超过 10 秒,则主节点会降级,并等待从节点完成数据同步。

  4. 在等待 60 秒,或从节点数据同步完成后,主节点将关闭。

如果没有最新的从节点,而您希望关闭主节点,请发出带force参数的shutdown命令,如以下mongosh操作所示:

db.adminCommand({shutdown : 1, force : true})

如果从节点没有立即更新,要在指定的秒数内持续检查从节点,请发出带有 timeoutSecs 参数的 shutdown。如果没有立即更新,MongoDB 将在指定的秒数内持续检查从节点。如果有从节点在分配的时间内赶上,则主节点将关闭。如果没有辅助设备赶上,它就不会关闭。

以下命令发出 shutdown ,并将 timeoutSecs 设立,制定为 5

db.adminCommand({shutdown : 1, timeoutSecs : 5})

或者,您可以将 timeoutSecs 参数与 db.shutdownServer() 方法一起使用:

db.shutdownServer({timeoutSecs : 5})
← 升级到 MongoDB 的最新版本