“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

db.shutdownServer()

在此页面上

  • 行为
  • 访问控制
  • 举例

5.0 版本中的更改

db.shutdownServer()

安全彻底地关闭当前的mongodmongos 进程。您必须对db.shutdownServer() 管理员数据库 发出 操作。

db.shutdownServer() 采用以下语法:

db.shutdownServer({
force: <boolean>,
timeoutSecs: <int>
})

该方法采用以下字段:

字段
说明
force

可选。指定 true 以强制关闭 mongodmongos。强制关闭会中断 mongodmongos 上正在进行的任何操作,并可能导致意外行为。

您可以使用 force 暂停和恢复正在进行的索引构建。有关更多信息,请参阅 db.shutdownServer() 副本集节点

可选。

从 MongoDB 5.0 开始,mongodmongos 进入静默期,以允许所有正在进行的数据库操作在关闭之前完成。

如果一个 mongod 主节点收到关闭请求,则主节点:

  1. 尝试降级到从节点。

    如果降级失败,并且:

  2. 进入静默期。

  3. 结束所有剩余的数据库操作。

  4. 关闭。

对于 mongod 从节点mongos 关闭请求,在请求关闭之后进入静默期。

静止期由以下各项指定:

mongodmongos 关闭时,客户端无法新建相关连接。

timeoutSecs指定了一个时间段(以秒为单位)。默认为:

  • 从 MongoDB 5.0 开始为 15 秒。

  • 在 MongoDB 5.0 以前的版本中为 10 秒。

mongod 按如下方式使用 timeoutSecs

  • 如果当前节点是副本集的主节点,则 mongod 会等待 timeoutSecs 字段指定的秒数,以便可选举节点跟上,然后再降级主节点。有关追赶时间的详情,请参阅复制延迟。

  • 如果当前节点在退出主节点后处于SECONDARY状态,则 timeoutSecs 中指定的任何剩余时间将作为静默期,以允许完成现有操作。新操作将发送到其他副本集节点。

从 MongoDB 5.0 开始,mongos 使用 TimeoutSecs 作为静默期,这会允许现有操作完成。新操作将发送到其他 mongos 节点。在 MongoDB 5.0 以前的版本中,mongos 立即关闭并且不使用 timeoutSecs

该操作为 shutdown 命令提供一个包装器。

对于通过身份验证启动的 mongod,您必须通过经过身份验证的连接运行 db.shutdownServer()。有关详细信息,请参阅访问控制

对于在没有身份验证的情况下启动的 mongod,必须从连接到 localhost 接口的客户端运行 db.shutdownServer()。例如,在与 mongod 相同的主机上运行 mongosh 并指定 --host "127.0.0.1" 选项。

如果mongod 副本集节点正在运行某些操作(例如索引构建),db.shutdownServer() 将失败。您可以指定 force: true 来将索引构建进度保存到磁盘。mongod 在重新启动时会恢复索引构建,并从保存的检查点继续运行。

从 MongoDB 5.0 开始,mongodmongos 进入静默期,以允许所有正在进行的数据库操作在关闭之前完成。

如果一个 mongod 主节点收到关闭请求,则主节点:

  1. 尝试降级到从节点。

    如果降级失败,并且:

  2. 进入静默期。

  3. 结束所有剩余的数据库操作。

  4. 关闭。

对于 mongod 从节点mongos 关闭请求,在请求关闭之后进入静默期。

静止期由以下各项指定:

mongodmongos 关闭时,客户端无法新建相关连接。

timeoutSecs指定了一个时间段(以秒为单位)。默认为:

  • 从 MongoDB 5.0 开始为 15 秒。

  • 在 MongoDB 5.0 以前的版本中为 10 秒。

mongod 按如下方式使用 timeoutSecs

  • 如果当前节点是副本集的主节点,则 mongod 会等待 timeoutSecs 字段指定的秒数,以便可选举节点跟上,然后再降级主节点。有关追赶时间的详情,请参阅复制延迟。

  • 如果当前节点在退出主节点后处于SECONDARY状态,则 timeoutSecs 中指定的任何剩余时间将作为静默期,以允许完成现有操作。新操作将发送到其他副本集节点。

从 MongoDB 5.0 开始,mongos 使用 TimeoutSecs 作为静默期,这会允许现有操作完成。新操作将发送到其他 mongos 节点。在 MongoDB 5.0 以前的版本中,mongos 立即关闭并且不使用 timeoutSecs

警告

强制关闭主节点可能会导致所有尚未复制到从节点的写入操作发生回滚

要在实施身份验证mongod 上运行 db.shutdownServer(),经过身份验证的用户必须具有 db.shutdownServer() 权限。例如,具有内置角色 hostManager 的用户就拥有关闭权限。

db.getSiblingDB("admin").shutdownServer()
db.getSiblingDB("admin").shutdownServer({ "force" : true })
db.getSiblingDB("admin").shutdownServer({ "timeoutSecs": 60 })
← db.setProfilingLevel()