2026年CentOS上MongoDB启动与配置完全指南:从安装到生产环境(2026)

一、MongoDB基础认知

1.1 什么是MongoDB

MongoDB是一个基于文档的NoSQL数据库,使用JSON格式的BSON文档存储数据。与传统关系型数据库相比,MongoDB具有以下特点:

特性 MongoDB 传统SQL数据库
数据模型 文档型(BSON) 行/表结构
扩展性 水平扩展简单 通常需要分区
查询语言 文档查询(JSON风格) SQL语句
性能 读密集型优秀 事务支持强
灵活性 schema-less 固定结构

1.2 MongoDB应用场景

MongoDB适用于以下场景:

## MongoDB最佳应用场景

### Web应用
- 内容管理系统(CMS)
- 用户配置文件存储
- 博客和文章系统
- 电商商品目录

### 大数据分析
- 日志收集和分析
- 物联网(IoT)数据存储
- 实时分析平台
- 时序数据处理

### 移动应用
- 用户数据存储
- 地理位置数据
- 聊天消息存储
- 社交网络数据

### 缓存层
- 会话数据存储
- 临时数据缓存
- 配置信息存储

二、CentOS上MongoDB安装

2.1 环境准备

# 查看系统版本
cat /etc/centos-release

# 更新系统
sudo yum update -y

# 安装必要工具
sudo yum install -y wget curl vim net-tools

2.2 添加MongoDB官方源

# 创建yum源文件
sudo nano /etc/yum.repos.d/mongodb.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

2.3 安装MongoDB

# 安装MongoDB
sudo yum install -y mongodb-org

# 或指定版本安装
sudo yum install -y mongodb-org-7.0.4 mongodb-org-server-7.0.4 mongodb-org-mongos-7.0.4 mongodb-org-tools-7.0.4

2.4 使用二进制包手动安装(备用方案)

# 下载MongoDB二进制包
cd /opt
sudo wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel90-7.0.4.tgz

# 解压
sudo tar -zxvf mongodb-linux-x86_64-rhel90-7.0.4.tgz

# 创建软链接
sudo ln -s /opt/mongodb-linux-x86_64-rhel90-7.0.4 /opt/mongodb

# 创建数据目录
sudo mkdir -p /data/db
sudo chmod -R 777 /data

# 创建日志目录
sudo mkdir -p /var/log/mongodb
sudo chmod -R 777 /var/log/mongodb

三、MongoDB启动与停止

3.1 启动MongoDB服务

方法一:使用systemd(推荐)

# 启动MongoDB
sudo systemctl start mongod

# 设置开机启动
sudo systemctl enable mongod

# 查看服务状态
sudo systemctl status mongod

方法二:使用mongod命令直接启动

# 基本启动命令
mongod --dbpath /data/db --logpath /var/log/mongodb/mongod.log --fork

# 带认证启动
mongod --dbpath /data/db --logpath /var/log/mongodb/mongod.log \
    --bind_ip 0.0.0.0 --port 27017 \
    --auth --fork

# 自定义配置启动
mongod --config /etc/mongod.conf --fork

3.2 停止MongoDB服务

# 优雅停止(推荐)
sudo systemctl stop mongod

# 或使用mongod命令
mongod --shutdown --dbpath /data/db

# 强制停止(不推荐)
sudo pkill -f mongod

3.3 重启MongoDB服务

# 重启服务
sudo systemctl restart mongod

# 重新加载配置(不需要重启)
sudo systemctl reload mongod

3.4 验证MongoDB运行状态

# 方法一:检查进程
ps aux | grep mongod

# 方法二:检查端口
netstat -tlnp | grep 27017

# 方法三:使用mongosh连接测试
mongosh --eval "db.adminCommand('ping')"

# 方法四:检查日志
tail -f /var/log/mongodb/mongod.log

四、MongoDB配置文件详解

4.1 默认配置文件结构

# 查看默认配置
sudo cat /etc/mongod.conf
# mongod.conf 示例配置

# 网络配置
net:
  port: 27017
  bindIp: 127.0.0.1  # 仅本地访问
  # bindIp: 0.0.0.0  # 允许远程访问(需配合防火墙)

# 存储配置
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1  # 缓存大小,根据内存调整

# 系统日志配置
systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true

# 进程控制配置
processManagement:
  timeZoneInfo: /usr/share/zoneinfo
  fork: true  # 后台运行

# 安全配置(可选)
security:
  authorization: enabled  # 启用认证
  # authorization: disabled  # 禁用认证(仅测试环境)

4.2 常用配置参数说明

## 核心配置参数

### network
- port: MongoDB监听端口,默认27017
- bindIp: 监听IP地址,127.0.0.1仅本地,0.0.0.0允许远程
- maxIncomingConnections: 最大连接数
- wireObjectCheck: 验证BSON对象完整性

### storage
- dbPath: 数据文件存储路径
- journal.enabled: 启用预写日志,保证数据安全
- engine: 存储引擎(wiredTiger/inMemory)
- wiredTiger.cacheSizeGB: 缓存大小

### systemLog
- destination: 日志目标(file/syslog)
- path: 日志文件路径
- logAppend: 追加模式写入日志
- logRotate: 日志轮转方式

### processManagement
- fork: 是否后台运行
- pidFilePath: PID文件路径

4.3 生产环境推荐配置

# 生产环境mongod.conf

net:
  port: 27017
  bindIp: 127.0.0.1
  maxIncomingConnections: 1000
  wireObjectCheck: true

storage:
  dbPath: /data/mongo
  journal:
    enabled: true
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4  # 建议设置为可用内存的50-60%
      journalCompressor: snappy
    collectionConfig:
      blockCompressor: snappy
    indexConfig:
      prefixCompression: true

systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true
  logRotate: rename

processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/mongod.pid

security:
  authorization: enabled

operationProfiling:
  mode: slowOp  # 记录慢查询
  slowOpThresholdMs: 100

五、MongoDB用户权限配置

5.1 创建管理员用户

# 连接到MongoDB(无认证模式)
mongosh

# 切换到admin数据库
use admin

# 创建管理员账户
db.createUser({
  user: "admin",
  pwd: "YourStrongPassword123",
  roles: [
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "readWriteAnyDatabase", db: "admin" },
    { role: "dbAdminAnyDatabase", db: "admin" },
    { role: "clusterAdmin", db: "admin" }
  ]
})

# 验证用户创建
db.getUser("admin")

# 退出
exit

5.2 创建应用用户

# 使用管理员登录
mongosh -u admin -p --authenticationDatabase admin

# 创建应用数据库
use myapp

# 为应用创建用户
db.createUser({
  user: "app_user",
  pwd: "AppUserPassword123",
  roles: [
    { role: "readWrite", db: "myapp" },
    { role: "dbAdmin", db: "myapp" }
  ]
})

# 退出
exit

5.3 启用认证并重启

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

# 添加security配置
security:
  authorization: enabled

# 重启MongoDB
sudo systemctl restart mongod

# 验证认证
mongosh -u admin -p --authenticationDatabase admin

5.4 用户权限角色说明

角色 权限说明 适用场景
read 读取数据 报表用户
readWrite 读写数据 应用用户
dbAdmin 数据库管理 运维人员
userAdmin 用户管理 DBA
clusterAdmin 集群管理 管理员
readAnyDatabase 读取所有库 审计人员
readWriteAnyDatabase 读写所有库 数据分析师

六、远程访问配置

6.1 修改绑定IP

# 编辑配置文件
sudo nano /etc/mongod.conf

# 修改bindIp为0.0.0.0
net:
  port: 27017
  bindIp: 0.0.0.0  # 允许所有IP访问

# 重启服务
sudo systemctl restart mongod

6.2 配置防火墙

# CentOS 7/8 使用firewalld
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
sudo firewall-cmd --reload

# 或使用iptables
sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT
sudo iptables-save

6.3 远程连接测试

# 从远程机器连接
mongosh "mongodb://your-server-ip:27017/myapp" -u app_user -p

# 或使用连接字符串
mongosh mongodb://admin:YourPassword@your-server-ip:27017/admin?authSource=admin

七、MongoDB启动脚本优化

7.1 创建系统服务脚本

# 创建服务文件
sudo nano /etc/systemd/system/mongod.service
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=mongod
Group=mongod
PermissionsStartOnly=true

ExecStartPre=/bin/mkdir -p /var/run/mongodb
ExecStartPre=/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/bin/chmod 0755 /var/run/mongodb

ExecStart=/usr/bin/mongod --config /etc/mongod.conf
ExecStartPre=/bin/sh -c 'test -d /var/lib/mongo || mkdir -p /var/lib/mongo && chown mongod:mongod /var/lib/mongo'

LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000

Restart=always
RestartSec=10

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=mongod

[Install]
WantedBy=multi-user.target
# 重新加载systemd配置
sudo systemctl daemon-reload

# 启用服务
sudo systemctl enable mongod

# 启动服务
sudo systemctl start mongod

7.2 启动检查脚本

#!/bin/bash
# MongoDB健康检查脚本
# 文件:/opt/mongodb_health_check.sh

LOG_FILE="/var/log/mongodb_health.log"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}

# 检查进程是否存在
if pgrep -x mongod > /dev/null; then
    log "MongoDB process is running"
else
    log "ERROR: MongoDB process not found!"
    log "Attempting to restart..."
    systemctl restart mongod
    sleep 5
fi

# 检查端口是否监听
if netstat -tuln | grep -q ":27017 "; then
    log "MongoDB port 27017 is listening"
else
    log "ERROR: MongoDB port not listening!"
fi

# 测试连接
if mongosh --quiet --eval "db.adminCommand('ping')" > /dev/null 2>&1; then
    log "MongoDB connection test passed"
else
    log "ERROR: MongoDB connection test failed!"
fi

# 检查磁盘空间
DISK_USAGE=$(df -h /var/lib/mongo | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 80 ]; then
    log "WARNING: Disk usage is ${DISK_USAGE}%"
else
    log "Disk usage is OK: ${DISK_USAGE}%"
fi

log "Health check completed"

7.3 定时健康检查

# 添加到crontab
crontab -e

# 每5分钟执行健康检查
*/5 * * * * /opt/mongodb_health_check.sh >> /var/log/mongodb_health.log 2>&1

# 每天凌晨检查并清理日志
0 3 * * * find /var/log/mongodb -name "*.log" -mtime +30 -delete

八、常见问题与解决方案

Q1:MongoDB启动失败,端口被占用怎么办?

# 检查端口占用
netstat -tlnp | grep 27017

# 如果是其他进程占用,停止它
sudo systemctl stop <other-service>

# 或者修改MongoDB端口
sudo nano /etc/mongod.conf
# 修改 net.port 为 27018

# 重启MongoDB
sudo systemctl restart mongod

Q2:MongoDB启动后立即退出怎么办?

# 查看错误日志
cat /var/log/mongodb/mongod.log | grep -A 5 "ERROR"

# 常见原因及解决方法

# 1. 数据目录权限问题
sudo chown -R mongod:mongod /var/lib/mongo
sudo chown -R mongod:mongod /var/log/mongodb

# 2. 磁盘空间不足
df -h
# 清理不必要的文件

# 3. 配置文件错误
sudo mongod --config /etc/mongod.conf --check

# 4. 内存不足
free -h
# 减少wiredTiger cacheSizeGB

Q3:如何查看MongoDB运行状态?

# 使用mongosh查看状态
mongosh -u admin -p --authenticationDatabase admin

# 查看服务器状态
db.adminCommand({ serverStatus: 1 })

# 查看当前连接数
db.adminCommand({ currentOp: 1, active: true }).inprog.length

# 查看数据库列表
show dbs

# 查看集合列表
use myapp
show collections

# 查看用户
db.adminCommand({ listUsers: 1 })

Q4:如何优化MongoDB启动性能?

# 1. 使用SSD存储数据
# 2. 合理设置cacheSizeGB(建议为可用内存的50-60%)
# 3. 启用wiredTiger引擎压缩
# 4. 定期维护索引

# 查看当前配置
db.adminCommand({ getParameter: '*' })

# 检查慢查询
db.getProfilingStatus()

# 启用慢查询日志
db.setProfilingLevel(1, { slowms: 100 })

Q5:如何设置自动启动?

# 确保MongoDB服务已创建
sudo systemctl list-unit-files | grep mongod

# 如果没有,使用以下命令创建
sudo systemctl enable mongod

# 验证开机启动
sudo systemctl is-enabled mongod

# 如果想禁用开机启动
sudo systemctl disable mongod

九、总结

本文详细介绍了CentOS上MongoDB的安装、启动、配置和管理:

  1. 安装方式:通过官方yum源或手动下载二进制包
  2. 启动方法:systemd管理或直接mongod命令
  3. 配置优化:根据服务器资源调整配置文件
  4. 安全配置:创建用户并启用认证
  5. 远程访问:配置防火墙和绑定IP
  6. 监控维护:创建健康检查脚本定期监控

快速启动命令汇总

# 一键启动MongoDB(假设已安装)
sudo systemctl start mongod
mongosh --eval "db.adminCommand('ping')"

# 一键安装并启动(测试用)
sudo yum install -y mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod

记住:生产环境一定要启用认证,定期备份数据,监控性能指标。

注:本文基于MongoDB 7.0编写,具体命令和配置可能因版本而异。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注