最稳妥方式是用包管理器安装,手动解压tgz易漏依赖、权限和systemd集成;Ubuntu/Debian需用gpg导入密钥并正确配置源,CentOS/RHEL 8+须用dnf并确认架构匹配,启动后须检查bindIp、SELinux及防火墙。

直接用包管理器安装最稳妥,除非你明确需要旧版本、离线环境或自定义路径,否则别碰 tgz 手动解压方式——它容易漏掉动态库依赖、权限配置和 systemd 集成,后续连启动都报 libcrypto.so.10 not found 或 Permission denied。
Ubuntu/Debian 上用 apt 安装 mongodb-org
官方源已弃用 apt-key,新版 Ubuntu(22.04+)必须改用 gpg 导入密钥,否则 apt-get update 会失败:
- 下载并导入 GPG 密钥:
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg - 添加源(注意替换发行版代号,如
jammy对应 Ubuntu 22.04):echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list - 更新并安装:
sudo apt-get update && sudo apt-get install -y mongodb-org - 启动后立即检查状态:
sudo systemctl status mongod—— 如果显示active (running)但端口没监听,大概率是bindIp还锁在127.0.0.1,得改/etc/mongod.conf
CentOS/RHEL 8+ 上用 dnf 安装 mongodb-org
RHEL 8 及以后不再支持 yum,且默认仓库里没有 MongoDB;用 dnf 装时若提示 No match for argument: mongodb-org,说明源没配对或系统架构不匹配(比如误下了 x86_64 包却跑在 ARM 服务器上):
- 创建 repo 文件:
sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo,内容填:[mongodb-org-7.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
- 安装前先确认系统架构:
uname -m,输出不是x86_64就别硬套这个 baseurl - 执行:
sudo dnf install -y mongodb-org,安装完立刻运行sudo systemctl daemon-reload,再start,否则可能报Unit mongod.service not found
手动解压 tgz 启动 mongod 失败的常见原因
看到 error while loading shared libraries 或 cannot execute binary file 别急着重下包,先定位问题根源:
-
ldd /path/to/mongod | grep "not found"—— 查缺哪些系统库,常见是libcrypto.so.10或libssl.so.10,RHEL 8+/AlmaLinux 9 默认只带 OpenSSL 1.1+,得降级或软链 -
file /path/to/mongod—— 确认二进制文件架构是否匹配当前系统(例如下载了rhel70包却跑在 RHEL 9 上) - 日志路径不可写或父目录不存在:
mongod不会自动创建logpath指向的完整路径,必须手动mkdir -p并chown给运行用户 - 配置文件里写了
fork: true却没配pidFilePath,会导致启动后找不到进程、systemctl无法管理
启动后连不上 27017 端口的三个关键检查点
即使 mongod 进程在跑,netstat -tlnp | grep 27017 也看不到监听,往往是以下某处卡住:
-
bindIp在/etc/mongod.conf里仍为默认值127.0.0.1,远程访问需显式改成0.0.0.0或具体 IP,改完必须sudo systemctl restart mongod - SELinux 强制开启(尤其 CentOS/RHEL):
sudo setsebool -P mongod_can_network on,否则即使 bindIp 放开,也会被拦截 - 防火墙没放行:
sudo firewall-cmd --permanent --add-port=27017/tcp && sudo firewall-cmd --reload(firewalld)或sudo ufw allow 27017(ufw)
真正麻烦的从来不是“怎么装”,而是装完发现服务起来了却连不上、日志空空如也、或者一重启就退服——这些基本都卡在配置文件权限、SELinux 策略、动态库版本对不上这三块。动手前先 cat /etc/os-release 看清系统版本和架构,比反复重装管用得多。











