MongoDB 8 配置参数详解
系统讲解 MongoDB 8.0 核心配置参数(storage、systemLog、net、security、processManagement 等),覆盖作用、默认值、取值范围与影响,并提供可直接落地的生产配置模板。
MongoDB 8 配置参数详解
目标:系统讲解 MongoDB 8.0 核心配置参数,覆盖每个参数的作用、默认值、取值范围与影响,并给出可直接落地的生产配置模板。所有默认值均在 MongoDB 8.0.32 真实环境实测(
mongod --config默认/etc/mongod.conf)。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS
- MongoDB 版本:8.0.32 MongoDB Community Server(官方 APT 仓库安装)
- 配置文件:
/etc/mongod.conf(YAML 格式) - 数据目录:
/var/lib/mongodb - 日志文件:
/var/log/mongodb/mongod.log - 参数采集方式:
mongod --config默认配置实测 +db.adminCommand({ getParameter: '*' })
二、前置条件
- 已安装 MongoDB 8.0 并可本地连接(
mongosh) - 了解配置文件为 YAML 格式:段落用两层缩进,禁止使用 Tab,
#为注释 - 修改参数后需重启 mongod 生效:
sudo systemctl restart mongod - 生产环境修改前先在测试环境验证
三、参数查看与修改方式
3.1 查看运行参数
# 查看全部可调参数(运行时生效值)
mongosh --quiet --eval 'db.adminCommand({ getParameter: "*" })'
# 查看指定参数
mongosh --quiet --eval 'db.adminCommand({ getParameter: "wiredTigerCacheSizeGB" })'
# 查看当前配置与数据库状态
mongosh --quiet --eval 'db.serverStatus().wiredTiger.cache'
💡 命令解释:
getParameter返回运行时参数;db.serverStatus()返回内存、缓存、连接等实时指标。
3.2 修改方式对比
| 方式 | 命令/操作 | 是否即时生效 | 是否持久化 | 适用参数 |
|---|---|---|---|---|
| 配置文件 | 编辑 /etc/mongod.conf + 重启 | 需重启 | 是 | 所有参数 |
| setParameter | db.adminCommand({ setParameter: 1, ... }) | 是 | 否(重启丢失) | 部分动态参数(如慢查询阈值) |
💡 说明:大多数核心参数(dbPath、bindIp、cacheSizeGB 等)为静态参数,只能通过配置文件修改并重启生效。个别参数(如
slowOpThresholdMs)可运行时动态调整。
四、参数总览
本文档覆盖的全部参数汇总如下表(默认值均为 MongoDB 8.0.32 实测):
| 分类 | 参数(YAML 路径) | 默认值(实测) | 配置示例 | 说明 |
|---|---|---|---|---|
| storage | storage.dbPath | /var/lib/mongodb | /opt/data/mongodb | 数据文件存储目录 |
| storage | storage.journal.enabled | true | true | WiredTiger 日志(崩溃恢复),8.0 默认开启 |
| storage | storage.wiredTiger.engineConfig.cacheSizeGB | 物理内存 50% | 1 | WiredTiger 缓存上限,最重要的内存参数 |
| storage | storage.wiredTiger.engineConfig.journalCompressor | snappy | zlib | 日志压缩算法(snappy/zlib/zstd) |
| systemLog | systemLog.destination | file | file | 日志输出目标(file/syslog/console) |
| systemLog | systemLog.path | /var/log/mongodb/mongod.log | 自定义路径 | 日志文件路径 |
| systemLog | systemLog.logAppend | true | true | 追加写日志(false 会覆盖旧日志) |
| systemLog | systemLog.logLevel | 0 | 1 | 日志详细级别(0~5,越大越详细) |
| net | net.port | 27017 | 27018 | 服务监听端口 |
| net | net.bindIp | 127.0.0.1 | 0.0.0.0 | 监听网卡(默认仅本机,远程需改) |
| net | net.maxIncomingConnections | 65536 | 10000 | 最大并发连接数 |
| net | net.serviceExecutor | synchronous | adaptive | 连接处理线程模型 |
| processManagement | processManagement.fork | false | true | 后台守护方式运行 |
| processManagement | processManagement.timeZoneInfo | /usr/share/zoneinfo | 同左 | 时区数据文件路径(日期/时间函数) |
| security | security.authorization | disabled | enabled | 账号鉴权开关(生产必须开启) |
| security | security.keyFile | — | /etc/mongo-keyfile | 副本集/分片集群成员间认证密钥 |
| operationProfiling | operationProfiling.mode | off | slowOp | 慢查询分析开关(off/slowOp/all) |
| operationProfiling | operationProfiling.slowOpThresholdMs | 100 | 200 | 慢查询阈值(毫秒) |
| replication | replication.replSetName | — | rs0 | 副本集名称(未设置则为单机) |
五、核心参数详解
5.1 storage.dbPath(数据目录)
数据文件(WiredTiger 存储引擎的集合数据、索引、journal 日志)存放目录。
storage:
dbPath: /var/lib/mongodb
| 项目 | 说明 |
|---|---|
| 默认值 | /var/lib/mongodb |
| 影响 | 决定数据落盘位置,直接影响磁盘容量规划 |
| 建议 | 生产环境放独立数据盘(如 /opt/data/mongodb),迁移见安装文档"配置项 3" |
5.2 storage.wiredTiger.engineConfig.cacheSizeGB(WiredTiger 缓存)
WiredTiger 引擎使用内存作为读写缓存,这是 MongoDB 最重要的性能参数。
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 1
| 项目 | 说明 |
|---|---|
| 默认值 | 物理内存的 50%(上限 256GB) |
| 影响 | 缓存越大读写越快,但过大会挤压操作系统页缓存与业务进程内存 |
| 建议 | 物理内存 50% 起步;内存有限时显式调小,避免 OOM。调整后需重启生效 |
5.3 systemLog(日志配置)
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
| 参数 | 默认值 | 说明 |
|---|---|---|
destination | file | file 写文件、syslog 写系统日志、console 输出到标准输出 |
logAppend | true | true 追加写;false 每次启动覆盖旧日志 |
logLevel | 0 | 0 |
5.4 net.bindIp / net.port(网络监听)
net:
port: 27017
bindIp: 127.0.0.1
| 参数 | 默认值 | 说明 |
|---|---|---|
port | 27017 | 服务监听 TCP 端口,客户端连接端口 |
bindIp | 127.0.0.1 | 仅本机;远程访问改为 0.0.0.0(必须先开启鉴权) |
⚠️ 安全提醒:
bindIp: 0.0.0.0+ 未开启鉴权 = 数据库裸奔公网。必须先配置security.authorization: enabled。
5.5 security.authorization(账号鉴权)
security:
authorization: enabled
| 项目 | 说明 |
|---|---|
| 默认值 | disabled(8.0 默认不鉴权,任何人可连) |
| 影响 | 开启后所有连接必须认证,未认证操作返回 Unauthorized |
| 建议 | 生产环境必须开启,并提前创建管理员账号(见安装文档"配置项 1") |
5.6 operationProfiling(慢查询分析)
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
| 参数 | 默认值 | 说明 |
|---|---|---|
mode | off | off 关闭;slowOp 仅记录慢操作;all 记录所有操作(调试用,慎开) |
slowOpThresholdMs | 100 | 超过该毫秒数的操作记为慢操作,写入 system.profile |
5.7 replication.replSetName(副本集)
replication:
replSetName: rs0
| 项目 | 说明 |
|---|---|
| 默认值 | 未设置(单机模式) |
| 影响 | 设置后以副本集成员身份运行,需配合 security.keyFile 进行成员间认证 |
| 建议 | 高可用环境配置 3 节点副本集;单机测试无需设置 |
六、生产配置模板
# /etc/mongod.conf(生产环境推荐配置)
storage:
dbPath: /opt/data/mongodb # 数据放独立数据盘
journal:
enabled: true # 开启 journal,崩溃恢复
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 按物理内存调整(如 8G 内存设 4G)
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: 0.0.0.0 # 远程访问(务必配合下方鉴权)
maxIncomingConnections: 10000
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: enabled # 生产必须开启鉴权
operationProfiling:
mode: slowOp # 开启慢查询分析
slowOpThresholdMs: 100
# 副本集(高可用时启用):
# replication:
# replSetName: rs0
💡 说明:修改后重启生效:
sudo systemctl restart mongod。启用鉴权后所有连接需用mongosh -u 用户名 -p 密码 --authenticationDatabase admin。
七、常见问题
7.1 问题 1:修改配置后 mongod 无法启动
原因: 最常见的两类:① YAML 缩进错误(用了 Tab);② dbPath 目录不存在或属主不对。
解决:
# 查看错误日志定位
tail -f /var/log/mongodb/mongod.log
# YAML 校验
python3 -c "import yaml,sys; yaml.safe_load(open('/etc/mongod.conf')); print('YAML OK')"
# 目录权限修复
sudo chown -R mongodb:mongodb /opt/data/mongodb
7.2 问题 2:开启鉴权后忘记管理员密码
解决: 临时以 --noauth 启动重置:
sudo systemctl stop mongod
sudo mongod --config /etc/mongod.conf --bind_ip 127.0.0.1 --noauth &
mongosh admin --eval 'db.updateUser("admin", { pwd: "新密码" })'
sudo mongod --shutdown
sudo systemctl start mongod
7.3 问题 3:内存占用过高被 OOM
原因: WiredTiger 缓存默认取物理内存 50%,叠加连接线程等开销。
解决: 显式调小缓存:storage.wiredTiger.engineConfig.cacheSizeGB: 2,重启生效。
八、参考链接
本文档由 www.quzuo.net 平台开发