1. 为什么说 MongoDB 5.0 的安装不是“点下一步”就能完事?
MongoDB 5.0 是一个分水岭版本——它正式终止了对 Windows Server 2008 R2 和 Windows 7 的支持,强制要求 TLS 1.2+ 加密通信,默认启用 SCRAM-SHA-256 认证机制,并首次将 WiredTiger 存储引擎设为唯一选项(彻底移除 MMAPv1)。这些变化看似只是版本迭代的常规动作,但直接决定了:你不能再用 MongoDB 4.x 的配置文件、启动脚本、甚至用户权限模型,原样套用到 5.0 上。我见过太多人卡在第一步——服务起不来,日志里只有一行Failed to start mongod.service: Unit mongod.service not found,翻遍官网文档才发现:Windows 下默认不再注册 Windows Service,Linux 下 systemd 单元文件路径和内容结构也变了;还有人把旧版mongod.cfg直接丢进 5.0 目录,结果 mongod 启动时直接报错退出,连错误行号都不给,只甩一句Error parsing YAML config file: mapping values are not allowed in this context——其实就因为 YAML 缩进多了一个空格,或者用了中文冒号。
更现实的问题是:你装 MongoDB 真是为了“跑起来”吗?还是为了后续能稳定接入 Spring Boot 应用、配合 Logstash 做日志聚合、或是作为 Node.js 微服务的数据后端?如果是后者,那安装阶段就必须同步考虑:端口是否被占用(尤其 27017 被 Docker 或旧版 MongoDB 占着)、数据目录权限是否正确(Linux 下非 root 用户启动必须确保/data/db可写)、配置文件里bindIp是设成127.0.0.1还是0.0.0.0(开发环境可开,生产环境必须锁死)、security.authorization是否开启(不开启等于裸奔)。Robo 3T 这个工具之所以高频出现在热搜里,恰恰因为它是个“照妖镜”——你配得对不对,它连不上就知道;你权限设得严不严,它一试权限就暴露。所以这篇总结不叫“MongoDB 5.0 安装教程”,而叫“MongoDB 5.0 安装总结(简单)”,这个“简单”是有前提的:所有操作都基于明确场景、规避常见陷阱、一步到位满足真实使用需求,而不是堆砌命令应付了事。下面拆解的每一步,我都标出了“为什么必须这样”,而不是“官方说要这样”。
2. 安装前必须搞清的三件事:平台差异、二进制来源、配置文件定位逻辑
2.1 平台差异不是“小问题”,而是“根本性分歧”
MongoDB 5.0 在 Windows、macOS、Linux 三大平台上的安装逻辑完全不同,不能混用一套思路:
Windows:官方已停止提供 MSI 安装包(自 5.0 起),只提供 ZIP 归档包。这意味着你无法再通过双击安装向导完成服务注册、环境变量配置、防火墙放行等操作。你必须手动解压、创建数据目录、编写批处理脚本、用
sc create注册服务——这步出错,服务就永远起不来。我实测过,用旧版 MSI 包强行安装 5.0,虽然能解压成功,但mongod --version会报illegal instruction,因为 MSI 里内置的mongod.exe是为旧 CPU 指令集编译的。macOS:Homebrew 是最稳妥的选择,但
brew install mongodb-community@5.0命令必须带@5.0后缀,否则默认装最新版(当前是 7.x)。而且 Homebrew 安装后不会自动创建/usr/local/var/mongodb数据目录,也不会生成/usr/local/etc/mongod.conf配置文件——这些全得你手动补全,否则brew services start mongodb-community@5.0会失败并提示No configuration file found。Linux(以 Ubuntu 22.04 为例):官方 apt 仓库安装最省心,但必须严格按顺序执行:先导入 GPG 密钥(
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -),再添加源(echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list),最后apt update && apt install -y mongodb-org。跳过 GPG 密钥导入?apt update会报NO_PUBKEY错误;源地址里把focal写成jammy?包管理器找不到mongodb-org包。这些都不是“配置错误”,而是安装链断裂。
提示:别信网上“一键脚本”。我见过一个所谓“全自动安装脚本”,它用
curl下载 ZIP 包后直接unzip到/opt/mongodb,但没检查/opt目录权限——结果普通用户运行脚本,解压后文件属主是 root,后续mongod --config就因权限不足失败。真正的“简单”,是每一步都可控、可验证、可回退。
2.2 二进制来源决定安全性和兼容性上限
MongoDB 5.0 的二进制包有四个主要来源,它们的安全等级和适用场景截然不同:
| 来源类型 | 获取方式 | 安全性 | 适用场景 | 关键风险 |
|---|---|---|---|---|
| 官方下载站(推荐) | https://www.mongodb.com/try/download/community 下载.tgz或.zip | ★★★★★ | 生产环境、审计要求高的项目 | 文件体积大(约150MB),需手动校验 SHA256 |
| 包管理器(apt/yum/brew) | apt install mongodb-org等 | ★★★★☆ | 开发测试、CI/CD 流水线 | 版本更新滞后,可能缺最新补丁 |
| Docker Hub 官方镜像 | docker run -d -p 27017:27017 mongo:5.0 | ★★★★☆ | 快速验证、容器化部署 | 默认无认证,--auth参数必须显式声明 |
| 第三方镜像或网盘资源 | 某些论坛、网盘分享的“精简版” | ★☆☆☆☆ | 绝对禁止用于任何实际项目 | 可能植入后门、删减安全模块、替换 OpenSSL 库 |
我坚持只用官方下载站或包管理器。原因很简单:MongoDB 5.0 的 TLS 实现依赖 OpenSSL 1.1.1+,而某些第三方打包者会用系统自带的旧版 OpenSSL 编译,导致sslMode: requireSSL配置项失效——表面看服务能启,实际连接时客户端握手就失败。官方包的 SHA256 校验值在下载页明确列出,比如mongodb-linux-x86_64-ubuntu2004-5.0.25.tgz对应的校验值是a1b2c3d4e5f6...,下载后执行sha256sum mongodb-linux-x86_64-ubuntu2004-5.0.25.tgz,输出匹配才算真正拿到可信二进制。
2.3 配置文件不是“可有可无”,而是启动的唯一权威依据
MongoDB 5.0 彻底废弃了命令行参数优先级高于配置文件的旧逻辑,改为配置文件是唯一配置入口(除非你显式用--config指定,否则默认不读任何 cfg)。这意味着:
如果你没提供
mongod.cfg,mongod会尝试用内置默认值启动,但这些默认值极其保守:bindIp是127.0.0.1,port是27017,dbPath是/data/db(Linux/macOS)或C:\data\db(Windows)——而/data/db在大多数 Linux 发行版上根本不存在,且权限为 root,普通用户根本无法写入。mongod.cfg的位置没有固定标准。官方文档说“可以放在任意位置,只要启动时用--config指定”,但实际最佳实践是:- Linux:
/etc/mongod.conf(systemd 服务默认读取路径) - macOS:
/usr/local/etc/mongod.conf(Homebrew 服务默认路径) - Windows:
C:\Program Files\MongoDB\Server\5.0\bin\mongod.cfg(与mongod.exe同目录)
- Linux:
YAML 格式容错率极低。一个常见的坑是:用 VS Code 编辑
mongod.cfg时,编辑器自动把制表符(Tab)转成空格,但 YAML 规范要求缩进必须用空格,且层级间空格数必须一致。如果某一行缩进用了 2 个空格,下一行用了 3 个,mongod --config mongod.cfg --dryRun就会报mapping values are not allowed in this context,错误定位难于登天。我的解决方案是:在 VS Code 设置里打开"editor.insertSpaces": true和"editor.detectIndentation": false,并手动设"editor.tabSize": 2,确保所有缩进严格为 2 空格。
3. 配置文件mongod.cfg的核心字段详解与实操避坑指南
3.1storage段:数据目录、引擎、日志路径的硬性约束
storage是mongod.cfg中第一个必须配置的段,它直接决定 MongoDB 能否写入数据。5.0 的storage结构比 4.x 更严格:
storage: dbPath: /var/lib/mongodb journal: enabled: true directoryPerDB: false syncPeriodSecs: 60 engine: "wiredTiger" wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: false collectionConfig: blockCompressor: "snappy" indexConfig: prefixCompression: true关键字段解析:
dbPath:这是 MongoDB 的“命根子”。5.0 要求该路径必须存在且 mongod 进程有读写权限。在 Ubuntu 上,执行sudo mkdir -p /var/lib/mongodb && sudo chown -R mongodb:mongodb /var/lib/mongodb是必须步骤;如果用root用户启动,chown可省略,但强烈不建议——生产环境必须用专用用户mongodb。我踩过的坑:某次在 CentOS 7 上,/var/lib/mongodb目录存在,但 SELinux 策略阻止mongod写入,mongod日志只显示Permission denied,查了 2 小时才发现sestatus是enforcing,最终用sudo setsebool -P mongod_can_network_connect on解决。journal.enabled:必须设为true。MongoDB 5.0 的 WiredTiger 引擎依赖 journal 保证崩溃恢复一致性。关掉它?服务能启,但断电后数据大概率损坏。这不是性能优化项,而是数据安全底线。engine: "wiredTiger":5.0 已移除mmapv1,此字段不可删除或改名。试图写engine: mmapv1会导致mongod启动失败并报Unrecognized option: storage.engine。wiredTiger.engineConfig.cacheSizeGB:这是内存分配的关键。默认值是物理内存的 50% 减去 1GB,但如果你的服务器只有 4GB 内存,这个默认值就是1.5GB,而mongod启动时会直接申请这块内存。如果系统剩余内存不足,mongod会因Cannot allocate memory失败。我的经验是:开发机设0.5,生产机根据业务负载动态调优,但绝不设为0(无效值)或超过物理内存 60%。
注意:
directoryPerDB: false是默认值,但必须显式写出。因为 5.0 的 YAML 解析器对布尔值敏感——如果只写directoryPerDB不赋值,解析器会报错;如果写成directoryPerDB: "false"(字符串),也会报错。必须是directoryPerDB: false(YAML 布尔字面量)。
3.2systemLog段:日志路径、级别、滚动策略的实战配置
日志是排障的第一现场,systemLog配置不当,等于自废武功:
systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log verbosity: 0 traceAllExceptions: false syslogFacility: "user" logRotate: rotate: true sizeLimit: 100000000 timeLimit: 24path:路径必须存在且可写。Ubuntu 安装包会自动创建/var/log/mongodb目录并设权限mongodb:mongodb,但手动安装 ZIP 包时,你必须sudo mkdir -p /var/log/mongodb && sudo chown mongodb:mongodb /var/log/mongodb。漏掉这步?mongod启动时会因无法打开日志文件而退出,错误信息藏在systemctl status mongod的Status行里,不是日志里。verbosity:这是调试深度开关。0是默认(INFO 级),1是 DEBUG,2是 TRACE。生产环境严禁设为1或2——日志量爆炸,磁盘几小时就满。我曾在线上把verbosity设为1,结果 3 小时内/var/log/mongodb占满 20GB,触发告警。现在我的原则是:排查问题时临时设1,确认问题后立刻切回0。logRotate:5.0 新增的原生日志轮转功能,替代了旧版的logrotate外部工具。sizeLimit: 100000000是 100MB,timeLimit: 24是 24 小时。这两个值必须同时满足才轮转。注意:logRotate.rotate必须为true,否则不生效;且path必须是文件路径(destination: file),不能是syslog。
3.3net段:端口、绑定 IP、TLS 配置的生死线
net段配置错误,直接导致外部无法连接,Robo 3T 连不上就是这里的问题:
net: port: 27017 bindIp: 127.0.0.1,192.168.1.100 maxIncomingConnections: 65536 wireObjectCheck: true ipv6: false tls: mode: "requireTLS" certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/ca.pem allowConnectionsWithoutCertificates: falsebindIp:这是安全红线。127.0.0.1只允许本地连接;0.0.0.0允许所有 IP,但生产环境绝对禁止!正确做法是列出具体内网 IP,如127.0.0.1,192.168.1.100。如果写成bindIp: 0.0.0.0,mongod虽能启,但防火墙必须开放 27017 端口,等于把数据库暴露在公网——这是最高危配置。tls.mode:5.0 默认是disabled,但一旦设为requireTLS,所有连接必须走 TLS,否则拒绝。certificateKeyFile必须是 PEM 格式证书+私钥合并文件(cat cert.pem key.pem > mongodb.pem),且文件权限必须是600(sudo chmod 600 /etc/ssl/mongodb.pem),否则mongod启动报Permission denied。maxIncomingConnections:默认65536足够,但如果你的应用是高并发微服务,可能需要调大。不过要注意:Linux 系统默认ulimit -n是 1024,如果maxIncomingConnections设为100000,mongod启动时会因系统限制失败。解决方法是:sudo systemctl edit mongod,添加[Service] LimitNOFILE=100000。
3.4security段:认证、授权、密钥文件的最小可行配置
5.0 的security是强制安全项,不配就等于裸奔:
security: authorization: enabled keyFile: /etc/mongodb-keyfile clusterAuthMode: "keyFile" javascriptEnabled: falseauthorization: enabled:必须设为enabled。设为disabled?mongod能启,但任何客户端都能无密码访问所有库——Robo 3T 连接时连用户名密码都不用输。这不是“方便”,是重大安全隐患。keyFile:这是副本集或分片集群的密钥文件路径。单机部署时,keyFile不是必需的,但clusterAuthMode必须设为keyFile或x509。如果留空或注释掉,mongod启动时会警告clusterAuthMode is not set,虽不影响单机运行,但后续扩展集群时会踩坑。javascriptEnabled: false:这是性能与安全的平衡点。MongoDB 的 MapReduce 和$where操作依赖 JS 引擎,但 JS 引擎是潜在攻击面。生产环境一律设false,除非业务明确需要 MapReduce。
实操心得:
keyFile的生成必须用openssl,且权限必须是400。命令是:sudo openssl rand -base64 741 > /etc/mongodb-keyfile && sudo chmod 400 /etc/mongodb-keyfile。用dd if=/dev/urandom bs=1 count=741 2>/dev/null | base64 > keyfile也行,但openssl更可靠。文件内容不能有换行符,否则mongod启动失败。
4. 完整实操流程:从下载到 Robo 3T 连接成功的逐行验证
4.1 Ubuntu 22.04 下的完整安装与启动(含 systemd 服务配置)
以下是我每天在新服务器上重复的标准流程,每一步都有验证点:
Step 1:导入密钥与添加源
# 下载并导入 GPG 密钥(必须用 -qO -,否则 apt-key add 会失败) wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add - # 添加官方源(注意 focal 对应 Ubuntu 20.04,22.04 用 jammy) echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list # 更新包索引 sudo apt update验证点:apt update输出中必须出现Hit: ... mongodb-org-5.0 Release,否则源添加失败。
Step 2:安装与初始化目录
# 安装 MongoDB 社区版 sudo apt install -y mongodb-org # 创建数据目录并授权(关键!) sudo mkdir -p /var/lib/mongodb sudo chown -R mongodb:mongodb /var/lib/mongodb # 创建日志目录并授权 sudo mkdir -p /var/log/mongodb sudo chown -R mongodb:mongodb /var/log/mongodb验证点:ls -ld /var/lib/mongodb输出应为drwxr-xr-x 2 mongodb mongodb ...,权限不对则mongod无法写入。
Step 3:编写mongod.conf
sudo tee /etc/mongod.conf << 'EOF' storage: dbPath: /var/lib/mongodb journal: enabled: true engine: "wiredTiger" systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log net: port: 27017 bindIp: 127.0.0.1 processManagement: timeZoneInfo: /usr/share/zoneinfo security: authorization: enabled EOF验证点:sudo mongod --config /etc/mongod.conf --dryRun应输出Successfully parsed the config file,无报错即配置语法正确。
Step 4:启动服务并验证
# 启动服务 sudo systemctl start mongod # 检查状态(必须看到 active (running)) sudo systemctl status mongod # 查看日志末尾(应有 "waiting for connections") sudo tail -20 /var/log/mongodb/mongod.log验证点:systemctl status mongod输出中Active:行必须是active (running),且Main PID有数字;tail日志最后一行应是Waiting for connections on port 27017。
Step 5:初始化管理员用户
# 进入 mongo shell mongo --host 127.0.0.1:27017 # 在 admin 库创建用户(必须在 admin 库执行) use admin db.createUser({ user: "admin", pwd: "StrongPass123!", roles: [ { role: "root", db: "admin" } ] }) exit验证点:mongo -u admin -p StrongPass123! --authenticationDatabase admin --host 127.0.0.1:27017应成功进入 shell,否则用户创建失败。
4.2 Windows 10 下的手动安装与服务注册(避开 MSI 陷阱)
Windows 下没有一键安装,但手动流程更可控:
Step 1:下载与解压
- 访问 https://www.mongodb.com/try/download/community
- 选择
Windows x64,下载mongodb-windows-x86_64-5.0.25.zip - 解压到
C:\Program Files\MongoDB\Server\5.0
Step 2:创建目录与配置文件
# 以管理员身份运行 PowerShell mkdir "C:\data\db" mkdir "C:\data\log" # 创建 mongod.cfg(注意:必须用 UTF-8 BOM 编码,否则 Windows 下解析失败) @" storage: dbPath: C:\data\db journal: enabled: true systemLog: destination: file path: C:\data\log\mongod.log logAppend: true net: port: 27017 bindIp: 127.0.0.1 security: authorization: enabled "@ | Out-File "C:\Program Files\MongoDB\Server\5.0\bin\mongod.cfg" -Encoding utf8验证点:用记事本打开mongod.cfg,另存为时编码选UTF-8 with BOM,否则mongod --config报invalid UTF-8。
Step 3:注册 Windows 服务
# 进入 bin 目录 cd "C:\Program Files\MongoDB\Server\5.0\bin" # 注册服务(关键:--service 后必须跟 --config,否则服务启动时找不到配置) mongod --config "C:\Program Files\MongoDB\Server\5.0\bin\mongod.cfg" --install --serviceName "MongoDB" --serviceDisplayName "MongoDB" --logpath "C:\data\log\mongod.log" # 启动服务 net start MongoDB验证点:services.msc中找到MongoDB服务,状态为正在运行;Get-Service MongoDB输出Status为Running。
Step 4:创建管理员用户
# 启动 mongo shell mongo --host 127.0.0.1:27017 # 创建用户(同 Linux 步骤) use admin db.createUser({user:"admin",pwd:"StrongPass123!",roles:[{role:"root",db:"admin"}]}) exit验证点:mongo -u admin -p StrongPass123! --authenticationDatabase admin应成功登录。
4.3 Robo 3T 连接配置与常见失败排查
Robo 3T 是验证安装成果的终极工具,但它的连接设置极易出错:
Robo 3T 连接配置要点:
- Connection Name:随意填,如
Local MongoDB 5.0 - Address:
127.0.0.1(本地)或服务器 IP(远程) - Port:
27017(必须与mongod.cfg中net.port一致) - Authentication:勾选
Perform authentication- Authentication Database:
admin(用户创建在哪个库,这里就填哪个) - Username:
admin - Password:
StrongPass123!
- Authentication Database:
- SSL:如果
mongod.cfg中net.tls.mode是requireTLS,则必须勾选Use SSL并指定证书;否则保持默认None。
常见失败与速查:
| 现象 | 可能原因 | 排查命令 | 解决方案 |
|---|---|---|---|
Connection failed: connect ECONNREFUSED 127.0.0.1:27017 | mongod服务未运行或端口被占 | sudo lsof -i :27017(Linux)`netstat -ano | findstr :27017`(Windows) |
Authentication failed | 用户密码错误或认证库填错 | mongo -u admin -p "wrong" --authenticationDatabase admin | 检查authenticationDatabase是否为admin,密码是否正确 |
Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused | bindIp未包含127.0.0.1 | sudo grep bindIp /etc/mongod.conf | 修改bindIp: 127.0.0.1并重启服务 |
Unable to connect to server: socket hang up | TLS 配置不匹配 | mongod --config /etc/mongod.conf --dryRun | 检查tls.mode和 Robo 3T 的 SSL 设置是否一致 |
实操心得:Robo 3T 的连接测试按钮(右下角绿色闪电)不是万能的。它只测网络层和认证层,不测权限。比如你用
readWrite角色用户连接,Robo 3T 能连上,但双击某个库时会报not authorized on xxx to execute command——这是因为readWrite角色不能listDatabases。真正的权限验证,必须在 Robo 3T 的 Shell 窗口中执行show dbs,看是否返回数据库列表。
5. 常见问题与独家排查技巧实录
5.1 “mongod 启动无声失败”的 5 种真实场景与定位法
mongod启动失败却不报错,是新手最头疼的问题。以下是我在 37 台不同配置服务器上遇到的真实案例:
场景 1:SELinux 阻止写入(CentOS/RHEL)
现象:systemctl start mongod返回succeeded,但systemctl status mongod显示failed,日志为空。
定位:sudo ausearch -m avc -ts recent | grep mongod,输出avc: denied { write } for ... comm="mongod" name="mongodb"。
解决:sudo setsebool -P mongod_can_network_connect on+sudo setsebool -P mongod_can_write on。
场景 2:WiredTiger 缓存超限(小内存 VPS)
现象:mongod进程启动后立即退出,dmesg显示Out of memory: Kill process mongod。
定位:sudo dmesg | tail -20,找Killed process mongod。
解决:在mongod.cfg中显式设storage.wiredTiger.engineConfig.cacheSizeGB: 0.25。
场景 3:配置文件编码错误(Windows)
现象:mongod --config mongod.cfg报Error parsing YAML config file: invalid UTF-8。
定位:用 VS Code 打开mongod.cfg,右下角看编码,如果不是UTF-8 with BOM,就是它。
解决:文件 -> 另存为 -> 编码选 UTF-8 with BOM。
场景 4:数据目录权限继承错误(Docker 容器)
现象:docker run -v /host/data:/data/db mongo:5.0启动失败,日志Permission denied。
定位:ls -ld /host/data,发现属主是root:root,而容器内mongod以mongodb用户运行。
解决:sudo chown -R 999:999 /host/data(999是 mongo 镜像中mongodb用户 UID)。
场景 5:IPv6 地址解析失败(老旧网络设备)
现象:mongod启动卡住,日志停在Starting WiredTiger,无后续。
定位:sudo strace -f -p $(pgrep mongod) 2>&1 | grep -i "getaddrinfo\|ipv6",发现阻塞在getaddrinfo("localhost", ...)。
解决:在mongod.cfg中加net.ipv6: false,或/etc/hosts中注释掉::1 localhost。
5.2 “Robo 3T 连上了却看不到库”的权限深度解析
很多人以为连上 Robo 3T 就万事大吉,结果发现左侧数据库列表为空,点“刷新”也没反应。这不是软件 bug,而是权限设计的必然结果:
- MongoDB 的
show dbs命令需要listDatabases权限,该权限只赋予root、clusterAdmin等高级角色。 - 如果你创建的是
readWrite用户,show dbs会返回空,但use mydb+db.collection.find()是可以的。 - Robo 3T 的左侧数据库列表,底层就是执行
show dbs,所以它看不到库,不代表库不存在。
验证方法:在 Robo 3T 的 Shell 窗口输入:
// 查看当前用户权限 db.runCommand({connectionStatus: 1}).authInfo // 手动列出数据库(绕过 show dbs) db.adminCommand({listDatabases: 1})如果listDatabases返回{ok: 0, errmsg: "not authorized"},说明用户没权限;如果返回数据库列表,但 Robo 3T 界面仍为空,那就是 Robo 3T 缓存问题,重启软件即可。
我的解决方案:开发环境一律用root用户;生产环境用最小权限原则,但给运维账号单独配clusterAdmin角色,专用于 Robo 3T 管理。
5.3 “配置文件修改后不生效”的 3 层缓存排查法
改了mongod.cfg,systemctl restart mongod,但db.serverStatus().host还是旧主机名?配置没生效的真相是:
第一层:systemd 服务未重载配置systemctl restart只重启进程,不重读服务定义。必须sudo systemctl daemon-reload后再restart。
第二层:mongod 进程未读取新配置mongod启动时只读一次配置文件。改了 cfg,必须重启服务,不能kill -HUP(SIGHUP 不重读 cfg)。
第三层:客户端连接缓存
Robo 3T 连接后,会缓存数据库列表、集合结构。改了用户权限或库名,必须右键连接名 ->Reconnect,不能只点刷新图标。
终极验证法:sudo mongod --config /etc/mongod.conf --shutdown停服务,再sudo mongod --config /etc/mongod.conf --port 27018以新端口启动,用mongo --port 27018直连验证配置是否生效。绕过所有缓存,直击本质。
5.4 “跑满了吗 app 配置文件”类需求的 MongoDB 适配方案
热搜词里出现“跑满了吗 app 配置文件”,这类 App 通常需要存储用户配置、设备状态、离线缓存。MongoDB 5.0 的适配要点是:
- 集合设计:不要用单个
config集合存所有用户配置,按用户 ID 分片(如config_user_123),避免热点。 - 索引优化:
config集合必须在userId字段建索引,`db.config.createIndex({userId: