部署MongoDB流程
1. 安装MongoDB
版本选择建议
- CentOS 7:推荐MongoDB 4.4.x(兼容性好)
- CentOS 8/9:建议最新稳定版(如6.0+),需单独安装
mongodb-database-tools
安装步骤
1.添加官方仓库
# 添加官方仓库(以6.0为例)
sudo vi /etc/yum.repos.d/mongodb-org-6.0.repo
写入以下内容:
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
2.安装MongoDB
sudo yum install -y mongodb-org
3.启动服务并设开机自启
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod # 确认状态为active (running)
4.查看mongoDB的版本
mongod --version
我的输出如下:
db version v7.0.7
Build Info: {
"version": "7.0.7",
"gitVersion": "cfb08e1ab7ef741b4abdd0638351b322514c45bd",
"openSSLVersion": "OpenSSL 1.1.1w 11 Sep 2023",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "rhel80",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
2.配置文件mongod.conf
1.进入mongod.conf
vi /usr/local/mongodb/etc/mongod.conf
2.测试环境配置的单点副本集
storage:
dbPath: /usr/local/mongodb/data/
systemLog:
destination: file
path: /var/log/mongodb/mongodb.log
logAppend: true
net:
port: 27017
bindIp: 0.0.0.0
processManagement:
fork: false
security:
authorization: enabled
keyFile: /usr/local/mongodb/mongodb-keyfile
replication:
replSetName: "rs0"
3.Systemd 服务文件
1.新建服务文件。创建 /etc/systemd/system/mongod.service
sudo vi /etc/systemd/system/mongod.service
2.写入以下内容(根据自己的配置调整)
[Unit]
Description=MongoDB Database Server
After=network.target
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/etc/mongod.conf
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
安全性
访问限制
1.云服务器安全组限制ip来源
2.配置文件限制ip来源
3.更改端口,不使用MongoDB默认端口27017
副本集
生产环境需要至少3个数据承载节点(1个主节点+2个从节点)
安全检查
rs.status() // 检查所有成员状态
rs.conf() // 检查配置
系统用户管理
配置MongoDB
用户和用户组
在 Debian/Ubuntu 系统上,官方包使用的默认用户/组是 mongodb。
在 RHEL/CentOS/Fedora 等系统上,官方 RPM 包使用的默认用户/组是 mongod。
场景 | 用户/组名 | 原因 |
---|---|---|
CentOS 官方 RPM 包 | mongod |
MongoDB 官方为 RHEL 系设计的规范,确保自动化部署的一致性 。 |
手动二进制安装 | mongodb |
社区约定俗成,避免与进程名混淆,且与 Debian 系命名统一 。 |
1.创建一个名为 "mongodb" 的系统用户组
sudo groupadd mongodb
2.创建一个名为 "mongodb" 的系统用户,属于 mongodb 组,且无法交互式登录
sudo useradd -r -g mongodb -s /bin/false mongodb
useradd:创建新用户的命令
-r:创建系统用户(UID 在系统用户范围内)
-g mongodb:指定用户的主要组为刚创建的 mongodb 组
-s /bin/false:设置用户的登录 shell 为 /bin/false(禁止该用户登录系统)
mongodb:要创建的用户名
3.查看所有用户
cat /etc/passwd
4.查看所有用户组
getent group
5.执行 ps aux | grep mongo 时,将会看到:
mongod 12345 0.0 0.1 ... /usr/local/mongodb/bin/mongod ...
数据库用户管理
// 查看数据库所有用户
db.getUsers()
use admin
db.changeUserPassword("admin", passwordPrompt()) // 交互式重新设置强密码
// 删除高风险默认账户
db.dropUser("admin")
正常情况下应该新建专用管理账号(禁止使用默认名称,如admin、root)
db.createUser({
user: "mongo_admin_7x83", // 随机化用户名
pwd: passwordPrompt(), // 交互输入强密码
roles: [{
role: "root",
db: "admin"
}]
})
// 检查所有用户权限
db.runCommand({
usersInfo: { forAllDBs: true },
showCredentials: true,
showPrivileges: true
})
备份数据库(mongodump)
CentOS/RHEL 9 系统自带了 mongodb-database-tools
,无需额外配置外部仓库:
1.安装系统自带的 Database Tools
sudo yum install -y mongodb-database-tools
2.备份。应该启用定时备份脚本。
mongodump --host <服务器IP>:27017 \ # 数据库地址
--db <数据库名> \ # 指定需迁移的数据库
--username <用户> \ # 数据库账号
--password <密码> \
--authenticationDatabase admin \ # 认证库名(通常为admin)
--gzip \ # 启用压缩减少传输量
--oplog \ # 关键!确保备份期间数据一致性(副本集必需)
--out /backup/prod_dump/ # 备份输出目录
恢复数据库(mongorestore)
如果数据库使用docker部署
1.创建容器内文件夹
docker exec mongo mkdir -p /tmp/backup
2.把备份文件传输到目标服务器
3.恢复数据库
docker exec \
mongo_container \
mongorestore \
--username admin \
--password '您的密码' \
--authenticationDatabase admin \
--gzip \
--drop \
--db yuxin \
/tmp/backup/db
查看数据库情况命令
sudo systemctl restart mongod # 或使用你的服务名
sudo tail -f /var/log/mongodb/mongodb.log # 检查日志确认无报错