mongod 和 mongos 命令行参数

核心选项

  • -h, --help 显示所有可用的选项

  • --version 显示版本信息

  • --config <filename>, -f <filename> 指定配置文件路径

  • --configExpand <none|rest|exec> 4.2 版本新增,启用在配置文件中使用扩展指令。 扩展指令允许您为配置文件选项设置外部来源的值。

    • none 默认,mongodb 不扩展扩展指令。 如果任何配置文件设置使用扩展指令,mongod 将无法启动。
    • rest mongod 在解析配置文件时扩展 __rest 扩展指令。
    • exec mongod 在解析配置文件时扩展 __exec 扩展指令。

您可以将多个扩展指令指定为逗号分隔的列表,例如 rest,exec 如果配置文件包含未指定给 --configExpand 的扩展指令,则 mongod 返回错误并终止。

主要目的:用于从外部获取一些动态的配置值(比如运行命令获取-exec,或者通过 http 请求获取-rest)。

  • --verbose, -v 增加在标准输出或日志文件中返回的内部报告数量。 通过多次包含选项来增加 -v 形式的详细程度(例如 -vvvvv。)

  • --quiet 在尝试限制输出量的安静模式下运行 mongodb。(不会记录数据库命令的输出、复制集活动信息、连接建立事件、连接关闭事件)

  • --port <port> 指定端口。默认 27017,如果是分片机器默认是 27018,如果是 config server 默认是 27019。

  • --bind_ip <hostnames|ipaddresses|Unix domain socket paths> 默认 localhost。可以指定多个,如:localhost,/tmp/mongod.sock。如果用 ipv6 的地址,启动的时候需要使用 --ipv6 选项。监听所有的 ipv4 地址,使用 0.0.0.0。监听所有的 ipv6 地址,使用 ::

  • --bind_ip_all 3.6 新增。如果指定了这个选项,mongod 实例绑定到 0.0.0.0,如果使用了 --ipv6 选项,则绑定到 ::。只是指定 --bind_ip_all 的时候不会绑定到 ipv6 的 ::

不能同时指定 --bind_ip--bind_ip_all

  • --clusterIpSourceAllowlist <string> mongod 验证来自副本集其他成员的身份验证请求的 IP 地址/CIDR(无类别域间路由)范围列表,以及 mongos 实例(如果是分片集群的一部分)。 mongod 验证原始 IP 是否明确在列表中或属于列表中的 CIDR 范围。 如果 IP 地址不存在,则服务器不会对 mongodmongos 进行身份验证。

  • --clusterIpSourceWhitelist <string> 5.0 废弃。使用 --clusterIpSourceAllowlist 代替。

  • --ipv6 启用 ipv6 支持。默认不支持 ipv6。指定这个选项的时候,还需要通过 --bind_ip 来指定一个 ipv6 地址,又或者使用 --bind_ip_all 来绑定到 ::

  • --listenBacklog <number> 3.6 版本新增,目标系统的 SOMAXCONN 常量。listen queue 中可以存在的最大连接数。为了防止未定义行为出现,指定的数值必须位于 1 跟系统的 SOMAXCONN 之间的一个数。

  • --maxConns <number> 最大连接数

  • --logpath <path> 日志路径。默认情况下,mongod 会创建一个新的文件,如果我们在再次启动的时候想以追加的方式写入日志,可以加上 --logappend 选项。

  • --syslog 将所有日志输出到系统日志而不是日志文件(--logpath),windows 不支持。(4.2

  • --syslogFacility <string> 指定将消息记录到 syslog 时使用的工具级别。 您指定的值必须由您的操作系统的 syslog 实现支持。 要使用此选项,您必须启用 --syslog 选项。

  • --logappendmongod 实例重新启动时,将新条目附加到现有日志文件的末尾。 如果没有此选项,mongod 将备份现有日志并创建一个新文件。

  • --logRotate <string> 默认 rename。确定轮换服务器日志和/或审计日志时 logRotate 命令的行为。 可选值为 renamereopen

rename 重命名日志文件。

reopen 关闭并重新打开日志文件,当使用 Unix/Linux 的 logrotate 工具时使用 reopen 可以防止日志丢失。如果指定了 reopen,你必须同时使用 --logappend 选项。

  • --timeStampFormat <string> 默认 iso8601-local,日志里面的时间戳格式。

iso8601-utc 例子:1970-01-01T00:00:00.000Z

iso8601-local 例子:1969-12-31T19:00:00.000-05:00

  • --traceExceptions 仅供内部诊断使用

  • --pidfilepath <path> 指定保存 mongod 进程 pid 文件的路径。运行 mongod 或者 mongos 进程的用户必须有这个路径的写权限。如果不指定这个选项,则进程不会创建 PID 文件。此选项通常仅与 --fork 选项结合使用才有用。

在 Linux 上,PID 文件管理通常由发行版的初始化系统负责,如 /etc/init.d 或者 systemctl。只有当你没有使用这些初始化系统的时候,才使用 --pidfilepath 选项。

在 macOS 上,PID 文件通常由 brew 来处理。只有当你没有使用 brew 的时候才使用 --pidfilepath 选项。

  • --keyFile <file> 指定密钥文件的路径,该文件存储 MongoDB 实例用于在分片集群或副本集中相互验证的共享密钥。 --keyFile 意味着 --auth

  • --setParameter <options> 指定 MongoDB 服务器参数 中描述的 MongoDB 参数之一。 您可以指定多个 setParameter 字段。

  • --nounixsocket 禁用侦听 UNIX 域套接字。 --nounixsocket 仅适用于基于 Unix 的系统。mongod 进程会一直监听 unix 套接字,除非以下几个条件任意一个满足:

    • --nounixsocket 被设置
    • net.bindIp 没有设置
    • net.bindIp 没有指定 localhost 或者它关联的 IP 地址

从官方的 .deb 或者 .rpm 安装包安装的 mongod 进程默认的 bind_ip127.0.0.1

  • --unixSocketPrefix <path> 默认 /tmp。仅用于基于 Unix 的系统。指定保存进程 socket 文件的路径。mongod 进程会创建并监听 unix 套接字,除非以下几个条件任意一个满足:

    • net.unixDomainSocket.enabled 被设置为 false
    • 其他几个条件同 --nounixsocket 的几个条件。
  • --filePermissions <path> 默认 0700。指定 UNIX 域套接字的权限。仅用于 UNIX 类系统。

  • --fork 启用在后台运行 mongod 进程的守护进程模式。 默认情况下,mongod 不作为守护进程运行:通常,您将 mongod 作为守护进程运行,通过使用 --fork 或使用处理守护进程的控制进程(例如,与 upstartsystemd 一样)。

使用 --fork 选项要求您使用以下其中一项配置 mongod 的日志输出:--logpath--syslog

--fork 选项不支持 windows。

  • --auth 启用授权以控制用户对数据库资源和操作的访问。 启用授权后,MongoDB 要求所有客户端首先对自己进行身份验证,以确定客户端的访问权限。通过 mongo shell 配置用户。 如果不存在用户,localhost 将可以继续访问数据库,直到您创建第一个用户。

  • --noauth 禁用授权。当前的默认值。

  • --transitionToAuth 3.4 新增。允许 mongod 接受并创建与部署中的其他 mongodmongos 实例之间的经过身份验证和未经身份验证的连接。 用于执行副本集或分片集群从无身份验证配置到内部身份验证的滚动转换。 需要指定内部身份验证机制,例如 --keyFile

例如,如果使用密钥文件进行内部身份验证,则 mongod 会使用匹配的密钥文件与部署中的任何 mongodmongos 创建经过身份验证的连接。 如果安全机制不匹配,则 mongod 会使用未经身份验证的连接。

使用 --transitionToAuth 运行的 mongod 不会强制执行用户访问控制。 用户无需任何访问控制检查即可连接到您的部署并执行读取、写入和管理操作。

  • --cpu 强制 mongod 进程每四秒报告一次写锁中 CPU 时间的百分比。

  • --sysinfo 返回诊断系统信息,然后退出。 该信息提供页大小、物理页数和可用物理页数。

  • --noscripting 禁用脚本引擎

  • --notablescan 禁止需要集合扫描的操作。

  • --shutdown --shutdown 选项干净安全地终止 mongod 进程。 使用此选项调用 mongod 时,您必须直接或通过配置文件和 --config 选项设置 --dbpath 选项。仅在 Linux 系统可用。

  • --networkMessageCompressors <string> 指定在 mongod 实例之间数据传输的压缩算法(又或者是在分片之间、复制集之间、mongoshell、支持 OP_COMPRESSED 消息格式的驱动)。在 3.6 和 4.0 版本里面,mongodmongos 使用 snappy 作为默认的网络传输压缩算法。从 4.2 版本开始,mongodmongos 默认支持 snappy,zstd,zlib 三种压缩算法。如果不想使用网络压缩,可以将这个选项设置为 disabled

注意:

如果指定了多个压缩算法,会从通信发起者里面按顺序获取第一个共同的压缩算法(跟接受通信的一方)。比如 mongosh 指定了压缩算法为 zlib,snappy,而 mongod 指定的压缩算法为 snappy,zlib
那么在 mongoshmongod 之间的通信将会使用 zlib

如果通信双方没有共同的压缩算法,则将不会使用传输压缩。

  • --timeZoneInfo <path> 从中加载时区数据库的完整路径。 如果未提供此选项,则 MongoDB 将使用其内置时区数据库。默认是 /usr/share/zoneinfo

  • --outputConfig 4.2 新增。输出 mongod 实例的配置选项(以 yaml 格式)。

存储选项

  • --storageEngine string 存储引擎,默认 wiredTiger。如果您尝试使用 --dbpath 启动 mongod,其中包含由 --storageEngine 指定的存储引擎以外的存储引擎生成的数据文件,mongod 将拒绝启动。

  • --dbpath 在 Linux 上默认为 /data/db,windows 上为 \data\db。指定 mongod 实例存储数据的目录。如果是使用配置文件,则对应的配置项为 storage.dbPath。在 --dbpath 路径的文件对应的存储引擎必须跟 --storageEngine 一致,否则会启动失败。

  • --directoryperdb 使用单独的目录来存储每个数据库的数据。 目录在 --dbpath 目录下,每个子目录名对应数据库名。

  • --syncdelay <value> 控制多长时间使用 fsync 操作同步变动到磁盘。如果设置为 0,MongoDB 将不会同步数据到磁盘。 不要在生产环境使用这个选项,在几乎所有情况下使用默认设置即可。

  • --upgrade 更新磁盘里的文件格式。

  • --repairmongod 实例上的所有数据库执行修复程序。

  • --journal 启用持久性日志以确保数据文件保持有效和可恢复。 此选项仅在您指定 --dbpath 选项时适用。 mongod 默认启用日志功能。

  • --nojournal 禁用日志功能。

  • --journalCommitInterval <value> mongod 进程允许在日志操作之间的最长时间(以毫秒为单位)。 值的范围可以从 1 到 500 毫秒。 较低的值会增加日志的持久性,但会降低磁盘性能。

WiredTiger 选项

  • --wiredTigerCacheSizeGB <float> 定义 WiredTiger 将用于所有数据的内部缓存的最大大小。 索引构建消耗的内存(请参阅 maxIndexBuildMemoryUsageMegabytes)与 WiredTiger 缓存内存是分开的。

从 3.4 开始,默认的值是 50% of (RAM - 1 GB)256MB 中较大的那一个。避免将其设置为比默认值更大的值。通过 WiredTiger,MongoDB 使用 WiredTiger 内部缓存和文件系统缓存。通过文件系统缓存,MongoDB 自动使用 WiredTiger 缓存或其他进程未使用的所有空闲内存。

--wiredTigerCacheSizeGB 限制了 WiredTiger 内部缓存的大小。 操作系统会将可用的空闲内存用于文件系统缓存,这允许压缩的 MongoDB 数据文件保留在内存中。 此外,操作系统将使用任何空闲 RAM 来缓冲文件系统块和文件系统缓存。

为了容纳额外的 RAM 使用者,您可能需要减少 WiredTiger 内部缓存大小。

默认的值假设了你的系统仅有一个 mongod 实例在运行,如果你需要在一台机器上运行多个 mongod 实例,则需要减少 --wiredTigerCacheSizeGB 配置值。如果运行在容器中,则也需要设置为比容器可用内存更小的值。

  • --wiredTigerMaxCacheOverflowFileSizeGB <float> 4.4 版本废弃。

  • --wiredTigerJournalCompressor <compressor> 默认 snappy。指定压缩 WiredTiger 日志数据的算法。

  • --wiredTigerDirectoryForIndexes 指定这个选项的时候,mongod 会将集合和索引保存到不同目录中。

  • --wiredTigerCollectionBlockCompressor <compressor> 默认 snappy,指定集合的压缩算法。

  • --wiredTigerIndexPrefixCompression <boolean> 默认 true。启用或禁用索引数据的前缀压缩。

复制集选项

  • --replSet <setname> 4.0 新增。配置复制。 指定副本集名称作为此集的参数。 副本集中的所有主机必须具有相同的集名称。有多个复制集的时候,每个复制集的名字必须不一样。

  • --oplogSize <value> 指定复制集 oplog 的最大大小,单位 M。

  • --oplogMinRetentionHours <value> 4.4 新增。指定保留 oplog 条目的最小小时数,其中十进制值表示小时的分数。 例如,值 1.5 表示一小时三十分钟。必须大于等于0。默认 0。就是 oplog 到达最大大小之后,超过这个时间的日志需要被删除。

  • --enableMajorityReadConcern 默认 true。

分片集群选项

  • --configsvr 作为集群的配置服务器启动的时候使用。配置服务器只能读写 configadmin 数据库。默认端口为 27019。默认的 --dbpath/data/configdb,除非另外指定。从 3.4 开始,你必须将配置服务器作为复制集部署。不能和 --shardsvr 同时使用。配置服务器不能作为分片服务器。

  • --configsvrMode <string> 只在 3.2 可用。

  • --shardsvr 作为分片服务器启动。默认端口为 27018。从 3.6 开始,你必须将分片服务器作为复制集部署。

  • --moveParanoia 如果指定,则在块迁移期间,分片会将从该分片迁移的所有文档保存到 --dbpathmoveChunk 目录中。MongoDB 不会自动删除保存在 moveChunk 目录中的数据。

  • --noMoveParanoia 从 3.2 开始,默认使用 --noMoveParanoia。在块迁移期间,分片不保存从分片迁移的文档。

TLS 选项

  • --tlsMode <mode> 启用 TLS 支持。disabled 不使用 TLS。allowTLS 服务器之间不使用 TLS,对于即将到来的连接,可以使用或者不使用 TLS。preferTLS 服务器之间使用 TLS,对于即将到来的连接,可以使用或者不使用 TLS。requireTLS 必须使用 TLS。

  • --tlsCertificateKeyFile <filename> 指定包含了 TLS 证书和 key 的 .pem 文件路径。

  • --tlsCertificateKeyFilePassword <value> 指定解开 .pem key 文件的密码。

  • --clusterAuthMode <option> 默认 keyFile。用于集群认证的认证方式。

  • --tlsClusterFile <filename> 指定包含用于集群或副本集成员身份验证的 x.509 证书密钥文件的 .pem 文件。

  • --tlsCertificateSelector <parameter>=<value> 指定证书属性,以便从操作系统的证书存储中选择匹配的证书以用于 TLS。

  • --tlsClusterCertificateSelector <parameter>=<value> 指定证书属性,以便从操作系统的证书存储中选择匹配的证书以用于内部 x.509 成员身份验证。

profiler 选项

  • --profile <level> 0,默认值,不收集任何数据。1 收集慢查询操作。2 记录所有操作。

  • --slowms <integer> 默认 100,单位毫秒。慢查询时间,超过这个时间的操作被视作慢查询。

  • --slowOpSampleRate <double> 默认 1.0。应该分析或记录的慢速操作的比例。 --slowOpSampleRate 接受 0 到 1 之间的值,包括 0 和 1。

审计选项

MongoDB Enterprise 版本可用

  • --auditDestination syslogconsolefile。启用审计并指定审计日志保存的路径。

  • --auditFormat 审计日志的格式,JSON 或者 BSON

  • --auditPath 如果 --auditDestination 指定了 file,则需要通过这个选项指定具体保存路径。

  • --auditFilter 审计日志过滤特定操作。

mongos 分片集群选项

  • --configdb <replicasetName>/<config1>,<config2>... 指定配置服务器和分片集群。

  • --localThreshold 默认 15。mongos 会将读操作发送给复制集中 ping 时间小于这个值的 mongod 实例。