Ubuntu 22.04 安装 MongoDB 8.0 指南

在 Ubuntu 22.04 上安装 MongoDB 8.0(8.0.32),同时给出官方 APT 源在线安装与 tar.gz 源码离线安装(内网/无网)两套方案,覆盖环境准备、官方源/tar 包安装、systemd 托管与原生命令启动、安全加固、常用运维命令(mongosh)、数据目录迁移与卸载,附完整实测回显。

MongoDBMongoDB安装部署数据库文档型NoSQL2026/09/27

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/ 是 APT signed-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 平台开发