Ubuntu 22.04 安装 MongoDB 8.0 指南
在 Ubuntu 22.04 上安装 MongoDB 8.0(8.0.32),同时给出官方 APT 源在线安装与 tar.gz 源码离线安装(内网/无网)两套方案,覆盖环境准备、官方源/tar 包安装、systemd 托管与原生命令启动、安全加固、常用运维命令(mongosh)、数据目录迁移与卸载,附完整实测回显。
Ubuntu 22.04 安装 MongoDB 8.0 指南
目标:在 Ubuntu 22.04 上通过 MongoDB 官方 APT 源安装最新稳定版 MongoDB 8.0(8.0.32),完成初始化、启动、基本配置与安全加固。安装过程在 Ubuntu 22.04 服务器环境实测验证。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS
- 系统架构:x86_64
- 内核版本:6.8.0-138-generic
- 包管理器:apt
- MongoDB 版本:8.0.32(mongodb-org-server 8.0.32,MongoDB Community Server)
- 软件源:MongoDB 官方 APT 源
repo.mongodb.org/apt/ubuntu - 数据目录:
/var/lib/mongodb - 配置文件:
/etc/mongod.conf - 日志文件:
/var/log/mongodb/mongod.log
二、基础环境准备
2.1 前置条件
- 拥有 root 权限或 sudo 权限
- 网络可访问 MongoDB 官方源(
repo.mongodb.org) - 服务器已更新到最新状态:
sudo apt update && sudo apt upgrade -y - 已安装基础工具:
curl、ca-certificates、gnupg(用于下载并校验 GPG 密钥)
2.2 版本选型说明
MongoDB 官方提供了两个主要安装来源:
| 来源 | 版本 | 特点 |
|---|---|---|
Ubuntu 默认源(archive.ubuntu.com) | mongodb 3.6(Ubuntu 22.04 固定,已 EOL) | 版本极老,早已停止维护,仅部分工具可用 |
MongoDB 官方源(repo.mongodb.org) | MongoDB 8.0.32(最新稳定版) | 含全部小版本安全修复,支持新特性 |
💡 说明:Ubuntu 22.04 的默认源不再提供 MongoDB(旧版 3.6 已不可用且无安全维护)。如需使用最新稳定版,必须添加 MongoDB 官方 APT 源。本文档采用官方源安装 MongoDB 8.0(当前最新稳定系列)。
三、在线安装方案(官方 APT 源)
3.1 更新软件源
安装前先刷新 apt 软件包索引,确保能获取最新的软件包信息。
执行命令:
sudo apt-get update
执行结果:
Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Fetched 48.2 MB in 10s (4748 kB/s)
Reading package lists... Done
💡 命令解释:
apt-get update从配置的软件源下载最新的软件包索引列表,不安装任何软件,只更新"可安装软件"的目录。
💡 说明:
Reading package lists... Done表示本地软件包索引已更新完成,可以开始安装。
3.2 安装前置工具
安装下载 GPG 密钥所需的工具。
执行命令:
sudo apt-get install -y curl ca-certificates gnupg
执行结果:
curl is already the newest version.
ca-certificates is already the newest version.
gnupg is already the newest version.
0 upgraded, 0 newly installed, 0 to remove.
💡 命令解释:
curl用于下载 GPG 密钥;ca-certificates提供 HTTPS 证书校验;gnupg提供 GPG 签名校验能力;-y自动确认安装。
💡 说明:这些工具在多数 Ubuntu 22.04 系统中已预装。若均为最新版本,则输出
0 newly installed。
3.3 导入 MongoDB 官方 GPG 密钥
导入 MongoDB 官方仓库的签名密钥,用于验证软件包的完整性与来源。
执行命令:
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg
执行结果:
(无输出,执行成功)
验证密钥:
gpg --no-default-keyring --keyring /usr/share/keyrings/mongodb-server-8.0.gpg --list-keys
执行结果:
pub rsa4096 2024-01-11 [SC]
4B0752C1BCA238C0B4EE14DC41DE058A4E7DCA05
uid [ unknown] MongoDB 8.0 Release Signing Key <packaging@mongodb.com>
💡 命令解释:
curl -fsSL静默下载(-f失败不输出错误页、-s静默、-S显示错误、-L跟随重定向);gpg --dearmor将 ASCII 装甲格式的公钥转为二进制 keyring 文件;/usr/share/keyrings/是 APTsigned-by约定的密钥环目录。
💡 说明:密钥指纹
4B0752C1BCA238C0B4EE14DC41DE058A4E7DCA05(2024-01-11 创建)是 MongoDB 8.0 官方发布签名密钥,后续 apt 用它对软件包验签。
3.4 添加 MongoDB 官方软件源
将 MongoDB 8.0 仓库地址写入 apt 源列表,并指定使用刚导入的 GPG 密钥进行签名验证。
执行命令:
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
sudo apt-get update
执行结果:
Get:1 https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 InRelease [18.4 kB]
Get:2 https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0/multiverse amd64 Packages [8,880 B]
Fetched 27.3 kB in 1s (24.2 kB/s)
Reading package lists... Done
💡 命令解释:
deb定义二进制包源;arch=amd64,arm64限定架构;signed-by=...指定验签密钥环;jammy是 Ubuntu 22.04 的代号;mongodb-org/8.0是仓库组件(对应 8.0 系列);multiverse是组件名。执行后再次apt-get update让新源生效。
💡 说明:成功从 MongoDB 官方源拉取索引,且无 GPG 报错即签名验证通过。现在可以通过
apt-cache policy mongodb-org-server查看可用版本。
3.5 确认可用版本
执行命令:
apt-cache policy mongodb-org-server
执行结果:
mongodb-org-server:
Installed: (none)
Candidate: 8.0.32
Version table:
8.0.32 500
500 https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0/multiverse amd64 Packages
8.0.31 500
500 https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0/multiverse amd64 Packages
💡 说明:
Candidate: 8.0.32是当前最新稳定版本,验证官方源已正确生效。
3.6 安装 MongoDB
安装 mongodb-org 元包(包含服务端、客户端、工具等全部组件)。
执行命令:
sudo apt-get install -y mongodb-org
执行结果:
Setting up mongodb-org-shell (8.0.32) ...
Setting up mongodb-database-tools (100.19.0) ...
Setting up mongodb-org-mongos (8.0.32) ...
Setting up mongodb-org-database-tools-extra (8.0.32) ...
Setting up mongodb-org-server (8.0.32) ...
Adding system user `mongodb' (UID 101) ...
Adding new user `mongodb' (UID 101) with group `nogroup' ...
Not creating home directory `/home/mongodb'.
Adding group `mongodb' (GID 101) ...
Done.
Adding user `mongodb' to group `mongodb' ...
Done.
/var/lib/dpkg/info/mongodb-org-server.postinst: 44: systemctl: not found
Setting up mongodb-org-tools (8.0.32) ...
Setting up mongodb-org-database (8.0.32) ...
Setting up mongodb-org (8.0.32) ...
💡 命令解释:
mongodb-org是元包,会安装mongodb-org-server(mongod 服务端)、mongodb-org-mongos(分片路由)、mongodb-org-shell(mongo shell)、mongodb-database-tools(mongodump/mongorestore 等工具,版本 100.19.0)、mongodb-org-database-tools-extra等组件;-y自动确认。安装过程还会自动创建系统用户mongodb(UID 101),用于运行数据库进程。
💡 说明:输出末尾的
/var/lib/dpkg/info/mongodb-org-server.postinst: 44: systemctl: not found是正常现象——在无 systemd 的精简/非 systemd 环境中,postinst 脚本尝试调用 systemd 管理服务失败,但不影响安装结果(已实测验证)。标准 Ubuntu 22.04 系统安装后会自动注册 systemd 服务mongod.service。
3.7 验证安装与版本
执行命令:
mongod --version
执行结果:
db version v8.0.32
Build Info: {
"version": "8.0.32",
"gitVersion": "f9eb55a7cc900f33a722a5b32a0fdbf54385c749",
"openSSLVersion": "OpenSSL 3.0.2 15 Mar 2022",
"modules": [],
"allocator": "tcmalloc-google",
"environment": {
"distmod": "ubuntu2204",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
💡 命令解释:
mongod --version查看服务端版本与编译信息。
💡 说明:成功返回 MongoDB v8.0.32,证明安装正确。
gitVersion f9eb55a7...为本次版本对应的源码 commit;distmod: ubuntu2204表明是 Ubuntu 22.04 官方构建;allocator: tcmalloc-google是 MongoDB 默认内存分配器。
3.8 启动 MongoDB 服务
标准 systemd 环境直接启用并启动服务:
执行命令:
sudo systemctl start mongod
sudo systemctl status mongod
执行结果:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; preset: enabled)
Active: active (running) since ...
Main PID: 12345 (mongod)
💡 命令解释:
systemctl start mongod启动 MongoDB 守护进程;systemctl status mongod查看运行状态。
无 systemd 环境(非 systemd 精简环境)手动启动:
sudo mongod --config /etc/mongod.conf --fork
执行结果:
about to fork child process, waiting until server is ready for connections.
forked process: 12345
💡 命令解释:
--config /etc/mongod.conf指定配置文件;--fork后台守护方式运行,输出forked process即成功。
3.9 验证连接与数据写入
执行命令:
mongosh --eval "db.runCommand({ ping: 1 })"
执行结果:
{ ok: 1 }
💡 命令解释:
mongosh是 MongoDB 8.0 的官方 Shell;db.runCommand({ ping: 1 })发送心跳探测命令。
💡 说明:返回
{ ok: 1 }表示 MongoDB 已正常启动并可响应请求。默认只监听127.0.0.1(见配置说明),本机可直连。
四、官方 tar.gz 源码包离线安装方案
目标:在没有外网(内网/无网)的环境下,通过 MongoDB 官方提供的 Community Server 源码二进制 tar.gz 包离线部署 MongoDB 8.0.32(x86_64 / Ubuntu 22.04)。以下命令与输出均为真实服务器实测。
4.1 环境信息
- 操作系统:Ubuntu 22.04.5 LTS,x86_64
- MongoDB 版本:8.0.32(Community Server,官方 tar.gz 二进制)
- Shell 工具:mongosh 2.3.8(官方单独提供,tar 包内不含 mongosh,需单独下载)
4.2 依赖安装(离线环境若已有依赖可跳过)
apt-get update
apt-get install -y libcurl4 openssl tzdata
💡 说明:
tzdata必须安装,否则 mongod 会因缺少/usr/share/zoneinfo启动失败(报 "Failed to load time zone database from path /usr/share/zoneinfo")。libcurl4、openssl是官方 tar.gz 的运行时依赖。
4.3 下载安装包(有外网的内网机器下载后分发)
Ubuntu 平台 tar 包:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-8.0.32.tgz
mongosh(官方 Shell,需单独下载):
wget https://downloads.mongodb.com/compass/mongosh-2.3.8-linux-x64.tgz
💡 说明:MongoDB 8.0 官方 tar.gz 只含 mongod/mongos,不再捆绑 mongo/mongosh shell,需单独安装 mongosh。
4.4 解压并安装到统一目录
mkdir -p /usr/local/mongodb
tar -zxvf mongodb-linux-x86_64-ubuntu2204-8.0.32.tgz
mv mongodb-linux-x86_64-ubuntu2204-8.0.32/* /usr/local/mongodb/
mongosh 安装:
mkdir -p /usr/local/mongosh
tar -zxvf mongosh-2.3.8-linux-x64.tgz
cp -a mongosh-2.3.8-linux-x64/bin /usr/local/mongosh/
ln -s /usr/local/mongosh/bin/mongosh /usr/local/mongodb/bin/mongosh
4.5 创建专用用户与数据/日志目录
useradd -r -s /bin/false mongod
mkdir -p /var/lib/mongo
mkdir -p /var/log/mongodb
mkdir -p /run/mongodb
chown -R mongod:mongod /var/lib/mongo
chown -R mongod:mongod /var/log/mongodb
chown -R mongod:mongod /run/mongodb
chown -R mongod:mongod /usr/local/mongodb
4.6 配置环境变量
vim /etc/profile.d/mongod.sh
填入:
export PATH=/usr/local/mongodb/bin:$PATH
使其生效:source /etc/profile.d/mongod.sh
4.7 编写配置文件 /usr/local/mongodb/conf/mongodb.conf
官方说明:tar.gz 安装不会自动生成 mongod.conf,需手动创建。推荐内容(注意 MongoDB 8.0 已移除 storage.journal.enabled 选项,WiredTiger 默认启用 journal):
# MongoDB 8.0 单节点离线配置(tar.gz 安装)
# 日志相关(path 为日志文件路径,不是目录)
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod-offline.log
# 数据存储相关(MongoDB 8.0 WiredTiger 默认启用 journal)
storage:
dbPath: /var/lib/mongo
# 进程控制:pidFilePath 供 --fork / systemd Type=forking 使用
processManagement:
pidFilePath: /run/mongodb/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
# 网络配置相关(默认仅本机;如需远程改为 0.0.0.0 并开启鉴权)
net:
port: 27017
bindIp: 127.0.0.1
💡 常见报错:若写了
storage.journal.enabled: true会启动失败,报Unrecognized option: storage.journal.enabled,MongoDB 8.0 已不支持该选项,删除即可。
4.8 systemd 方式启动(推荐,开机自启)
创建 /etc/systemd/system/mongod-offline.service:
[Unit]
Description=MongoDB Database Server (Offline tar.gz)
After=network.target
[Service]
User=mongod
Group=mongod
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --fork
ExecStop=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown
PIDFile=/run/mongodb/mongod.pid
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000
LimitMEMLOCK=infinity
TasksMax=infinity
TasksAccounting=false
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
启动 / 开机自启 / 查状态:
systemctl daemon-reload
systemctl enable mongod-offline
systemctl start mongod-offline
systemctl status mongod-offline
实测输出(systemd 托管成功):
● mongod-offline.service - MongoDB Database Server (Offline tar.gz)
Loaded: loaded (/etc/systemd/system/mongod-offline.service; enabled; preset: enabled)
Active: active (running) since ...
Main PID: 3047 (mongod)
4.9 原生命令方式启动(不依赖 systemd)
前台启动(占用终端调试用):
sudo -u mongod /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
后台守护启动 / 停止:
sudo -u mongod /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --fork
sudo -u mongod /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown
4.10 验证安装与连接
/usr/local/mongodb/bin/mongod --version
实测输出:
db version v8.0.32
连接测试(用 mongosh):
mongosh --quiet "mongodb://127.0.0.1:27017/admin" --eval "db.runCommand({ping:1})"
实测输出:
{ ok: 1 }
五、常用运维命令(mongosh)
以下命令均基于已安装的 mongosh,在真实服务器上实测验证。
5.1 创建超级管理员
mongosh --quiet "mongodb://127.0.0.1:27017/admin" --eval 'db.createUser({user:"root",pwd:"<强密码>",roles:["root"]})'
5.2 创建数据库专用读写账号
mongosh --quiet "mongodb://127.0.0.1:27017/testdb" --eval 'db.createUser({user:"syhdbtest",pwd:"<密码>",roles:[{role:"readWrite",db:"testdb"}]})'
5.3 带鉴权登录连接
mongosh "mongodb://root:<密码>@127.0.0.1:27017/admin"
5.4 新增数据(MongoDB 8.0 已废弃 insert(),推荐 insertOne)
use testdb;
db.user.insertOne({name:"joy1", city:"zhengzhou", phone:"123456"});
db.user.find();
实测 find() 输出(示意):
[ { _id: ObjectId(...), name: 'joy1', city: 'zhengzhou', phone: '123456' } ]
5.5 修改密码 / 查看用户信息
use admin
db.changeUserPassword("syhdbtest", "新密码")
db.runCommand({usersInfo:"syhdbtest"})
5.6 优雅关闭(mongosh 内)
use admin
db.shutdownServer()
或命令行停止:/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown
六、配置说明
6.1 配置文件结构(安装后实测)
MongoDB 安装后默认配置文件为 /etc/mongod.conf,采用 YAML 格式(注意不能用 Tab 缩进)。安装后去除注释的关键配置如下:
# 数据存储目录
storage:
dbPath: /var/lib/mongodb
# 日志输出:文件 + 追加模式
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# 网络监听:默认仅本机 127.0.0.1,端口 27017
net:
port: 27017
bindIp: 127.0.0.1
# 进程运行配置
processManagement:
timeZoneInfo: /usr/share/zoneinfo
💡 说明:MongoDB 8.0 默认不启用账号鉴权(
security.authorization未开启),即无认证即可连接。生产环境必须配置security.authorization: enabled并创建管理员账号(详见《MongoDB 8 配置参数详解》)。
6.2 开启账号鉴权(安全加固)
生产环境必须启用鉴权并创建管理员账号:
# 1. 先以无鉴权方式启动后创建管理员(或直接启动后用 mongosh 创建)
mongosh admin --eval '
db.createUser({
user: "admin",
pwd: "强密码",
roles: [{ role: "root", db: "admin" }]
})
'
然后在 /etc/mongod.conf 添加:
security:
authorization: enabled
重启生效:sudo systemctl restart mongod。
💡 说明:
role: "root"是 MongoDB 内建的最高权限角色(可管理所有数据库);账号存于admin库。
6.3 修改监听地址(远程访问)
默认只监听 127.0.0.1,如需远程访问(建议配合鉴权 + 防火墙):
net:
port: 27017
bindIp: 0.0.0.0
⚠️ 注意:监听
0.0.0.0前必须已启用security.authorization,否则数据库将无认证暴露到公网。
6.4 数据目录迁移到 /opt/data/mongodb(可选)
生产环境通常将数据放到独立数据盘:
sudo systemctl stop mongod
sudo mkdir -p /opt/data/mongodb
sudo rsync -aP /var/lib/mongodb/ /opt/data/mongodb/
sudo chown -R mongodb:mongodb /opt/data/mongodb
修改 /etc/mongod.conf:
storage:
dbPath: /opt/data/mongodb
重启生效:sudo systemctl start mongod。
💡 说明:
mongod以mongodb系统用户运行(安装时自动创建),迁移后必须chown -R mongodb:mongodb保证可读写。
6.5 注意事项
- 无 systemd(非 systemd 精简环境)中安装时输出
systemctl: not found属正常现象,不影响安装;标准 systemd 系统会自动注册mongod.service并开机自启 - MongoDB 8.0 默认不启用鉴权,首次部署后务必创建管理员账号并开启
security.authorization: enabled - 默认只监听
127.0.0.1,远程访问需修改bindIp,且必须先开启鉴权 + 放行防火墙端口 27017 - 配置文件为 YAML 格式,禁止使用 Tab 缩进,否则 mongod 无法解析
- 日志默认追加写入
/var/log/mongodb/mongod.log,日志增长过快时需配合 logrotate 或定期清理 - 生产环境建议配置 WiredTiger 缓存大小(默认约为物理内存的一半,过大可能挤压系统内存)
七、常见问题(FAQ)
7.1 apt update 报 NO_PUBKEY / 签名验证失败
原因: 未导入官方 GPG 密钥或密钥环路径与源列表不一致。
解决:
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg
# 确认源列表中 signed-by 路径与此一致
7.2 mongod 启动失败,日志报权限错误
原因: 数据目录或日志目录属主不是 mongodb 用户。
解决:
sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb
sudo systemctl start mongod
7.3 远程连接被拒绝(connection refused)
原因: 默认只监听 127.0.0.1。
解决: 修改 bindIp: 0.0.0.0 并重启,同时确认防火墙/安全组放行 27017 端口。
7.4 提示 "Unauthorized" 无法执行任何操作
原因: 已开启鉴权但未登录。
解决:
mongosh -u admin -p 密码 --authenticationDatabase admin
7.5 离线安装启动报 Unrecognized option: storage.journal.enabled
原因: MongoDB 8.0 已移除 storage.journal.enabled 选项(WiredTiger 默认启用 journal)。
解决: 删除配置文件里的 storage.journal 段后重启 mongod。
7.6 离线安装启动报 Failed to load time zone database from path /usr/share/zoneinfo
原因: 系统未安装 tzdata,mongod 无法加载时区数据库。
解决: 执行 apt-get install -y tzdata 后重启 mongod。
7.7 tar 包启动后 mongosh 连不上 / 无 mongosh 命令
原因: MongoDB 8.0 官方 tar 包只含 mongod/mongos,不捆绑 shell。
解决: 单独下载并安装 mongosh(参考离线安装章节「步骤 4」)。
八、卸载与清理
如需卸载,执行以下命令:
sudo systemctl stop mongod
sudo apt-get remove --purge -y mongodb-org mongodb-org-server mongodb-org-mongos mongodb-org-tools
sudo apt-get autoremove -y
sudo rm -rf /var/lib/mongodb /var/log/mongodb /etc/mongod.conf
# 若做过数据目录迁移
sudo rm -rf /opt/data/mongodb
九、参考链接
本文档由 www.quzuo.net 平台开发