外观
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
EOFUbuntu/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 --dearmor2. 添加 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.listUbuntu 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.listDebian 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.list3. 更新包列表并安装 MongoDB
bash
sudo apt-get update
sudo apt-get install -y mongodb-orgCentOS/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
EOFCentOS/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
EOFCentOS/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
EOF2. 安装 MongoDB
bash
sudo yum install -y mongodb-org启动和管理 MongoDB 服务
1. 启动 MongoDB 服务
bash
# systemd 系统
sudo systemctl start mongod
# SysV 系统
sudo service mongod start2. 设置开机自启
bash
# systemd 系统
sudo systemctl enable mongod
# SysV 系统
sudo chkconfig mongod on3. 检查服务状态
bash
# systemd 系统
sudo systemctl status mongod
# SysV 系统
sudo service mongod status4. 停止 MongoDB 服务
bash
# systemd 系统
sudo systemctl stop mongod
# SysV 系统
sudo service mongod stop5. 重启 MongoDB 服务
bash
# systemd 系统
sudo systemctl restart mongod
# SysV 系统
sudo service mongod restart验证安装
1. 连接到 MongoDB
bash
mongosh2. 运行简单命令
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
mongosh2. 创建管理员用户
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 mongod4. 使用认证连接
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 ACCEPTCentOS/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.confCentOS/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参数 - 考虑增加系统内存
- 优化查询和索引,减少内存使用
最佳实践
- 使用官方仓库:始终从 MongoDB 官方仓库安装,而非系统自带仓库
- 启用认证:生产环境必须启用认证,防止未授权访问
- 配置防火墙:限制 MongoDB 端口的访问范围
- 定期备份:配置定期备份策略,确保数据安全
- 监控系统:使用 MongoDB Atlas、Prometheus+Grafana 等工具监控 MongoDB 性能
- 使用 SSD:MongoDB 对磁盘 I/O 敏感,推荐使用 SSD 存储
- 合理配置缓存:根据系统内存大小调整 WiredTiger 缓存大小
- 定期更新:及时更新 MongoDB 版本,获取安全补丁和性能改进
- 禁用 THP:禁用 Transparent Huge Pages 以提高性能
- 调整文件描述符限制:确保 MongoDB 有足够的文件描述符
常见问题(FAQ)
Q1: 如何检查 MongoDB 版本?
A1: 可以使用以下命令检查 MongoDB 版本:
bash
# 查看 mongod 版本
mongod --version
# 查看 mongosh 版本
mongosh --version
# 在 mongosh 中查看
mongosh --eval "db.version()"Q2: 如何更改 MongoDB 的数据存储路径?
A2: 更改 MongoDB 数据存储路径的步骤:
- 停止 MongoDB 服务:
sudo systemctl stop mongod - 创建新的数据目录:
sudo mkdir -p /new/path/mongodb - 复制现有数据:
sudo cp -a /var/lib/mongodb/* /new/path/mongodb/ - 更改目录权限:
sudo chown -R mongod:mongod /new/path/mongodb - 修改配置文件中的
dbPath选项 - 启动 MongoDB 服务:
sudo systemctl start mongod
Q3: 如何启用 MongoDB 的远程访问?
A3: 启用 MongoDB 远程访问的步骤:
- 编辑配置文件
/etc/mongod.conf - 修改
bindIp选项,添加允许访问的 IP 地址或设置为0.0.0.0(允许所有 IP 访问,不推荐生产环境) - 配置防火墙允许 27017 端口
- 重启 MongoDB 服务
- 确保启用了认证,防止未授权访问
Q4: 如何升级 MongoDB 版本?
A4: 升级 MongoDB 版本的步骤:
- 备份数据:
mongodump --out /backup/mongodb - 停止 MongoDB 服务:
sudo systemctl stop mongod - 按照安装步骤安装新版本
- 启动 MongoDB 服务:
sudo systemctl start mongod - 运行
mongosh连接到 MongoDB,系统会自动升级数据格式 - 验证数据完整性:
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.logQ6: 如何优化 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 mongodQ8: 如何查看 MongoDB 的连接数?
A8: 查看 MongoDB 连接数的方法:
bash
# 在 mongosh 中查看
mongosh --eval "db.serverStatus().connections"
# 或在 mongosh 交互模式下
use admin
db.serverStatus().connectionsQ9: 如何限制 MongoDB 的内存使用?
A9: 限制 MongoDB 内存使用的方法:
- 调整
storage.wiredTiger.engineConfig.cacheSizeGB参数,设置为系统内存的 50%-60% - 使用 cgroup 或其他系统工具限制 MongoDB 进程的内存使用
- 优化查询和索引,减少内存消耗
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()