MongoDB 作为标准程序运行。您可以通过发出 mongod 命令并指定选项,从命令行启动 MongoDB。有关选项列表,请参阅 mongod 参考。
以下示例假设包含 mongod 进程的目录位于您的系统路径中。mongod 进程是在单个服务器上运行的主节点数据库进程。从客户端的角度来看,mongos 提供了一致的 MongoDB 接口,等效于 mongod。mongosh 二进制文件提供管理 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()
使用 db.shutdownServer() 方法从 mongosh 关闭 mongod,如下所示:
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 实例:
回溯功能可用于以下架构:
x86_64arm64(从 MongoDB 5.0.10 和 6.0 开始)
要向运行中的 mongod 进程发出 SIGUSR2 信号,请使用以下命令:
kill -SIGUSR2 <mongod process ID>
停止副本集
步骤
强制关闭副本集
如果没有最新的从节点并且您想关闭主节点,请发出带有 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})