Skip to content

MongoDB Linux 安装指南

支持的 Linux 发行版

MongoDB 官方支持以下 Linux 发行版:

  • Ubuntu:20.04 LTS, 22.04 LTS
  • Debian:10, 11
  • CentOS/RHEL:7, 8, 9
  • Amazon Linux:2, 2023

安装前准备

1. 检查系统要求

组件要求
CPU至少 2 核,推荐 4 核以上
内存至少 4GB,推荐 8GB 以上
存储至少 20GB 空闲空间,推荐使用 SSD
文件系统XFS 或 EXT4(推荐 XFS)
操作系统64 位 Linux 发行版

2. 配置系统参数

禁用 Transparent Huge Pages (THP)

THP 会影响 MongoDB 性能,建议禁用:

bash
# 临时禁用
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 永久禁用(在 /etc/rc.local 中添加)
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
chmod +x /etc/rc.local

调整文件描述符限制

MongoDB 需要较高的文件描述符限制:

bash
# 在 /etc/security/limits.conf 中添加
cat >> /etc/security/limits.conf << EOF
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
EOF

Ubuntu/Debian 安装步骤

1. 导入 MongoDB 公钥

bash
sudo apt-get install gnupg curl
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor

2. 添加 MongoDB 仓库

Ubuntu 22.04

bash
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

Ubuntu 20.04

bash
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

Debian 11

bash
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/7.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

3. 更新包列表并安装 MongoDB

bash
sudo apt-get update
sudo apt-get install -y mongodb-org

CentOS/RHEL 安装步骤

1. 创建 MongoDB 仓库文件

CentOS/RHEL 9

bash
sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo << EOF
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
EOF

CentOS/RHEL 8

bash
sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo << EOF
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
EOF

CentOS/RHEL 7

bash
sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo << EOF
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
EOF

2. 安装 MongoDB

bash
sudo yum install -y mongodb-org

启动和管理 MongoDB 服务

1. 启动 MongoDB 服务

bash
# systemd 系统
sudo systemctl start mongod

# SysV 系统
sudo service mongod start

2. 设置开机自启

bash
# systemd 系统
sudo systemctl enable mongod

# SysV 系统
sudo chkconfig mongod on

3. 检查服务状态

bash
# systemd 系统
sudo systemctl status mongod

# SysV 系统
sudo service mongod status

4. 停止 MongoDB 服务

bash
# systemd 系统
sudo systemctl stop mongod

# SysV 系统
sudo service mongod stop

5. 重启 MongoDB 服务

bash
# systemd 系统
sudo systemctl restart mongod

# SysV 系统
sudo service mongod restart

验证安装

1. 连接到 MongoDB

bash
mongosh

2. 运行简单命令

javascript
// 显示数据库列表
db.adminCommand({ listDatabases: 1 })

// 创建测试数据库
use test

// 插入测试文档
db.test.insertOne({ name: "MongoDB", version: "7.0" })

// 查询文档
db.test.find()

基本配置

1. 配置文件位置

MongoDB 的主要配置文件位于:

  • Ubuntu/Debian:/etc/mongod.conf
  • CentOS/RHEL:/etc/mongod.conf

2. 常用配置选项

数据存储配置

yaml
storage:
  dbPath: /var/lib/mongodb  # 数据文件存储路径
  journal:
    enabled: true           # 启用日记功能
  engine: wiredTiger        # 存储引擎(WiredTiger 或 inMemory)
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4        # WiredTiger 缓存大小

网络配置

yaml
net:
  port: 27017               # 监听端口
  bindIp: 127.0.0.1,192.168.1.100  # 绑定 IP 地址,多个地址用逗号分隔
  tls:
    mode: disabled          # TLS 模式(disabled, allowTLS, preferTLS, requireTLS)

日志配置

yaml
systemLog:
  destination: file         # 日志输出目标(file 或 syslog)
  logAppend: true           # 追加日志而非覆盖
  path: /var/log/mongodb/mongod.log  # 日志文件路径
  logRotate: reopen         # 日志轮转方式(rename 或 reopen)

进程管理

yaml
processManagement:
  fork: true                # 以守护进程方式运行
  pidFilePath: /var/run/mongodb/mongod.pid  # PID 文件路径

复制集配置

yaml
replication:
  replSetName: rs0          # 复制集名称

安全配置

yaml
security:
  authorization: enabled    # 启用认证
  keyFile: /etc/mongodb/keyfile  # 复制集密钥文件路径

3. 应用配置更改

修改配置文件后,需要重启 MongoDB 服务:

bash
sudo systemctl restart mongod

创建管理员用户

1. 首次连接(无需认证)

bash
mongosh

2. 创建管理员用户

javascript
use admin

db.createUser({
  user: "admin",
  pwd: "your_strong_password",
  roles: [
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "readWriteAnyDatabase", db: "admin" },
    { role: "clusterAdmin", db: "admin" }
  ]
})

3. 启用认证

编辑配置文件 /etc/mongod.conf,启用认证:

yaml
security:
  authorization: enabled

重启 MongoDB 服务:

bash
sudo systemctl restart mongod

4. 使用认证连接

bash
# 方式1:命令行指定用户名密码
mongosh -u admin -p your_strong_password --authenticationDatabase admin

# 方式2:连接后认证
mongosh
use admin
db.auth("admin", "your_strong_password")

防火墙配置

Ubuntu/Debian(ufw)

bash
# 允许 MongoDB 端口
ufw allow 27017/tcp

# 允许特定 IP 访问 MongoDB
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 27017 -j ACCEPT

CentOS/RHEL(firewalld)

bash
# 允许 MongoDB 端口
firewall-cmd --permanent --add-port=27017/tcp
firewall-cmd --reload

# 允许特定 IP 访问 MongoDB
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="27017" accept'
firewall-cmd --reload

卸载 MongoDB

Ubuntu/Debian

bash
# 停止服务
sudo systemctl stop mongod

# 卸载包
sudo apt-get purge mongodb-org*

# 删除数据和日志
sudo rm -r /var/lib/mongodb
sudo rm -r /var/log/mongodb
sudo rm -r /etc/mongod.conf

CentOS/RHEL

bash
# 停止服务
sudo systemctl stop mongod

# 卸载包
sudo yum erase mongodb-org*

# 删除数据和日志
sudo rm -r /var/lib/mongodb
sudo rm -r /var/log/mongodb
sudo rm -r /etc/mongod.conf

版本差异

MongoDB 6.0+ 特性

  • 引入向量索引支持
  • 增强的变更流功能
  • 改进的分片集群性能
  • 增强的安全功能

MongoDB 5.0+ 特性

  • 原生支持时间序列集合
  • 增强的事务功能
  • 改进的副本集选举机制
  • 增强的查询计划缓存

MongoDB 4.4+ 特性

  • 增强的聚合管道功能
  • 改进的分片集群管理
  • 增强的安全审计
  • 改进的索引构建

常见问题及解决方案

1. MongoDB 服务无法启动

问题systemctl start mongod 失败

解决方案

  • 检查日志文件 /var/log/mongodb/mongod.log 查找错误信息
  • 确保数据目录权限正确:sudo chown -R mongod:mongod /var/lib/mongodb
  • 确保日志目录权限正确:sudo chown -R mongod:mongod /var/log/mongodb
  • 检查配置文件语法:mongod --config /etc/mongod.conf --check

2. 无法连接到 MongoDB

问题mongosh 连接失败

解决方案

  • 检查 MongoDB 服务是否运行:sudo systemctl status mongod
  • 检查防火墙设置是否允许 27017 端口
  • 检查配置文件中的 bindIp 设置,确保允许连接的 IP 地址
  • 检查认证凭据是否正确

3. 磁盘空间不足

问题:MongoDB 因磁盘空间不足而停止

解决方案

  • 清理磁盘空间
  • 考虑扩展磁盘容量
  • 配置 storage.wiredTiger.engineConfig.directoryForIndexes 将索引和数据分开存储

4. 内存使用过高

问题:MongoDB 占用过多内存

解决方案

  • 调整 storage.wiredTiger.engineConfig.cacheSizeGB 参数
  • 考虑增加系统内存
  • 优化查询和索引,减少内存使用

最佳实践

  1. 使用官方仓库:始终从 MongoDB 官方仓库安装,而非系统自带仓库
  2. 启用认证:生产环境必须启用认证,防止未授权访问
  3. 配置防火墙:限制 MongoDB 端口的访问范围
  4. 定期备份:配置定期备份策略,确保数据安全
  5. 监控系统:使用 MongoDB Atlas、Prometheus+Grafana 等工具监控 MongoDB 性能
  6. 使用 SSD:MongoDB 对磁盘 I/O 敏感,推荐使用 SSD 存储
  7. 合理配置缓存:根据系统内存大小调整 WiredTiger 缓存大小
  8. 定期更新:及时更新 MongoDB 版本,获取安全补丁和性能改进
  9. 禁用 THP:禁用 Transparent Huge Pages 以提高性能
  10. 调整文件描述符限制:确保 MongoDB 有足够的文件描述符

常见问题(FAQ)

Q1: 如何检查 MongoDB 版本?

A1: 可以使用以下命令检查 MongoDB 版本:

bash
# 查看 mongod 版本
mongod --version

# 查看 mongosh 版本
mongosh --version

# 在 mongosh 中查看
mongosh --eval "db.version()"

Q2: 如何更改 MongoDB 的数据存储路径?

A2: 更改 MongoDB 数据存储路径的步骤:

  1. 停止 MongoDB 服务:sudo systemctl stop mongod
  2. 创建新的数据目录:sudo mkdir -p /new/path/mongodb
  3. 复制现有数据:sudo cp -a /var/lib/mongodb/* /new/path/mongodb/
  4. 更改目录权限:sudo chown -R mongod:mongod /new/path/mongodb
  5. 修改配置文件中的 dbPath 选项
  6. 启动 MongoDB 服务:sudo systemctl start mongod

Q3: 如何启用 MongoDB 的远程访问?

A3: 启用 MongoDB 远程访问的步骤:

  1. 编辑配置文件 /etc/mongod.conf
  2. 修改 bindIp 选项,添加允许访问的 IP 地址或设置为 0.0.0.0(允许所有 IP 访问,不推荐生产环境)
  3. 配置防火墙允许 27017 端口
  4. 重启 MongoDB 服务
  5. 确保启用了认证,防止未授权访问

Q4: 如何升级 MongoDB 版本?

A4: 升级 MongoDB 版本的步骤:

  1. 备份数据:mongodump --out /backup/mongodb
  2. 停止 MongoDB 服务:sudo systemctl stop mongod
  3. 按照安装步骤安装新版本
  4. 启动 MongoDB 服务:sudo systemctl start mongod
  5. 运行 mongosh 连接到 MongoDB,系统会自动升级数据格式
  6. 验证数据完整性:mongorestore --dryRun /backup/mongodb

Q5: 如何查看 MongoDB 的日志?

A5: 查看 MongoDB 日志的方法:

bash
# 实时查看日志
tail -f /var/log/mongodb/mongod.log

# 查看最近 100 行日志
tail -n 100 /var/log/mongodb/mongod.log

# 搜索错误日志
grep -i error /var/log/mongodb/mongod.log

Q6: 如何优化 MongoDB 的性能?

A6: 优化 MongoDB 性能的方法:

  • 禁用 Transparent Huge Pages
  • 调整 WiredTiger 缓存大小
  • 使用合适的索引
  • 优化查询,避免全表扫描
  • 使用 SSD 存储
  • 合理配置复制集和分片集群
  • 监控性能指标,及时调整配置

Q7: 如何设置 MongoDB 的时区?

A7: MongoDB 使用系统时区,修改系统时区即可:

bash
# 查看当前时区
date

# 列出可用时区
timedatectl list-timezones

# 设置时区
sudo timedatectl set-timezone Asia/Shanghai

# 重启 MongoDB 服务
sudo systemctl restart mongod

Q8: 如何查看 MongoDB 的连接数?

A8: 查看 MongoDB 连接数的方法:

bash
# 在 mongosh 中查看
mongosh --eval "db.serverStatus().connections"

# 或在 mongosh 交互模式下
use admin
db.serverStatus().connections

Q9: 如何限制 MongoDB 的内存使用?

A9: 限制 MongoDB 内存使用的方法:

  1. 调整 storage.wiredTiger.engineConfig.cacheSizeGB 参数,设置为系统内存的 50%-60%
  2. 使用 cgroup 或其他系统工具限制 MongoDB 进程的内存使用
  3. 优化查询和索引,减少内存消耗

Q10: 如何备份 MongoDB 数据?

A10: 备份 MongoDB 数据的方法:

bash
# 使用 mongodump 备份所有数据库
mongodump --out /backup/mongodb-$(date +%Y%m%d)

# 备份指定数据库
mongodump --db test --out /backup/mongodb-$(date +%Y%m%d)

# 备份指定集合
mongodump --db test --collection users --out /backup/mongodb-$(date +%Y%m%d)

# 使用复制集快照备份(推荐生产环境)
# 1. 锁定数据库
db.fsyncLock()
# 2. 创建文件系统快照
# 3. 解锁数据库
db.fsyncUnlock()