MongoDB 作为标准程序运行。可以通过发出 mongod 命令并指定选项,从命令行启动 MongoDB。请参阅 mongod 参考资料,获取选项列表。
The following examples assume the directory containing the mongod process is in your system paths. The mongod process is the primary database process that runs on an individual server. mongos provides a coherent MongoDB interface equivalent to a mongod from the perspective of a client. The mongosh binary provides the administrative shell.
本文档讨论 mongod 进程,不过某些部分可能也适用于 mongos 实例。
启动 mongod 进程
默认情况下,MongoDB 在端口 27017 上监听来自客户端的连接,并将数据存储在 /data/db 目录中。
在 Windows 上,此路径位于启动 MongoDB 的驱动器上。例如,如果您未指定 --dbpath,则在 C:\ 驱动上启动 MongoDB Server 会将所有数据文件存储在 C:\data\db 中。
要全部使用默认设置启动 MongoDB,请在操作系统 Shell 中执行以下命令:
mongod
指定数据目录
如果希望 mongod 将数据文件存储在 /data/db 以外的路径,可以指定一个dbPath。在您启动 mongod 之前,dbPath 必须存在。如果不存在,请创建目录和权限,以便 mongod 可以向该路径读取和写入数据。有关权限的更多信息,请参阅安全操作文档。
要指定 dbPath 供 mongod 用作数据目录,请使用 --dbpath 选项。以下调用将启动一个 mongod 实例,并将数据存储于 /srv/mongodb 路径
mongod --dbpath /srv/mongodb/
注意
mongod 包括全时诊断数据捕获机制,以协助 MongoDB 工程师对部署进行故障排除。如果该线程失败,它将终止原始进程。为了避免出现最常见的故障,请确认运行该进程的用户有权创建 FTDC diagnostic.data 目录。对于 mongod,该目录位于 storage.dbPath 内。对于 mongos,该目录与 systemLog.path 并行。
指定 TCP 端口
每次只有一个进程可以监听网络接口连接。如果在一台计算机上运行多个 mongod 进程,或有其他进程必须使用该端口,则必须为每个进程分配不同的端口来监听客户端连接。
要指定 mongod 的端口,请在命令行上使用 --port 选项。以下命令在端口 12345 上启动 mongod 侦听:
mongod --port 12345
为避免混淆,请尽可能使用默认端口号。
将mongod 作为守护进程启动
将mongod进程作为守护进程运行(即fork),并将其输出写入日志文件,请使用 --fork 和 --logpath 选项。 您必须创建日志目录;但是,如果不存在,mongod 会创建日志文件。
以下命令将 mongod 作为守护进程启动,并将日志输出记录到 /var/log/mongodb/mongod.log。
mongod --fork --logpath /var/log/mongodb/mongod.log
其他配置选项
有关常见使用案例的常见配置和部署的概述,请参阅适用于自管理部署的运行时数据库配置。
停止mongod 进程
在彻底关闭时,mongod 会完成所有待处理的操作,将所有数据刷新到数据文件,并关闭所有数据文件。 其他关闭不彻底,可能会损害数据文件的有效性。
要确保完全关闭,请始终使用以下方法之一关闭 mongod 实例:
使用 shutdownServer()
Shut down the mongod from mongosh using the db.shutdownServer() method as follows:
use admin db.shutdownServer()
从初始化脚本中调用相同的方法可实现相同的结果。
对于启用 authorization 的系统,用户只有在向 admin 数据库进行身份验证时才能发出 db.shutdownServer(),或者在未启用身份验证的系统上通过本地主机接口发出。
使用 --shutdown
仅在 Linux 上支持。在命令行中,使用 --shutdown 选项关闭 mongod:
mongod --shutdown
使用 CTRL-C
使用 kill
仅在 Linux 和 macOS 上支持。在命令行中,可通过以下命令关闭特定的 mongod 实例:
kill <mongod process ID> kill -2 <mongod process ID>
SIGTERM 和副本集
如果副本集主节点收到 SIGTERM,则主节点会在关闭之前尝试降级。
如果成功降级,则该实例在随后的新主节点选举中不会进行投票,而是继续其关闭过程。
如果降级失败,该实例将继续其关闭过程。
SIGKILL
警告
切勿使用 kill -9(即 SIGKILL)终止 mongod 实例。
对 mongod 进程进行故障排除
生成回溯
对于在 Linux 上运行的 MongoDB 实例:
回溯详细信息显示该进程的函数调用,可用于诊断并在需要时提供给 MongoDB 支持。
回溯功能可用于以下架构:
x86_64arm64(从 MongoDB 5.0.10 和 6.0 开始)
重要
仅向无响应的mongod进程发出 SIGUSR2 信号。向健康的mongod进程发出此信号可能会导致该进程陷入死锁并需要重新启动。
要向运行中的 mongod 进程发出 SIGUSR2 信号,请使用以下命令:
kill -SIGUSR2 <mongod process ID>
停止副本集
步骤
如果 mongod 是副本集中的主节点,则此 mongod 实例的关闭过程包括以下步骤:
检查从节点的最新情况。
如果存在一个从节点,其数据状态落后于主节点不超过 10 秒,则主节点会降级,并等待从节点完成数据同步。
在等待 60 秒,或从节点数据同步完成后,主节点将关闭。
强制关闭副本集
If there is no up-to-date secondary and you want the primary to shut down, issue the shutdown command with the force argument, as in the following mongosh operation:
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})