004 CentOS 7.9 mongodb7.0.11安装及配置

https://www.mongodb.com/try/download/shell
https://www.mongodb.com/try/download/community

查找 MongoDB 进程 ID
ps aux | grep mongod


root     10384  0.0  0.0 112812   980 pts/0    S+   10:35   0:00 grep --color=auto mongod
这一行并不是 MongoDB 进程本身,而是执行的 grep mongod 命令产生的进程。当在终端中运行 ps aux | grep mongod 时,grep 命令会在 ps aux 的输出中搜索包含 "mongod" 的行。因此,这个 grep 进程会短暂出现在进程列表中,直到命令执行完毕。

这里的 grep --color=auto mongod 就是正在执行的搜索命令,它不属于 MongoDB 服务的一部分,而是用于查找 MongoDB 进程的工具命令。所以,这个进程与 MongoDB 服务的关闭无关。

如果想查找正在运行的 MongoDB 进程,应该会在 ps aux | grep mongod 的输出中看到除了 grep 命令之外的另一行,那一行会显示 MongoDB 进程的信息(如果 MongoDB 正在运行的话)。如果 MongoDB 没有运行,那么只会看到 grep 命令本身的进程。

在 CentOS 7.9 系统中,这个逻辑是一样的。如果 MongoDB 没有运行,使用 ps aux | grep mongod 只会显示出 grep 的进程,而不会显示出 MongoDB 的进程。如果想关闭 MongoDB,首先需要找到 MongoDB 的进程 ID(PID),然后使用 kill 命令来关闭它,如前面所述。如果找不到 MongoDB 的进程,那可能意味着 MongoDB 并没有运行。


确认 MongoDB 是否已安装
rpm -qa | grep mongodb

查找 mongod 的路径
sudo find / -name mongod


使用 journalctl 查看与 mongod.service 相关的日志
sudo journalctl -u mongod.service

如果日志中没有提供足够的信息,可以尝试手动运行 MongoDB,以便在控制台上直接查看错误信息。由于systemd 服务配置中 Type 设置为 forking,MongoDB 会尝试以分叉模式启动,这有时会使错误信息的输出不那么直观。可以手动运行 MongoDB 而不分叉,以便在控制台上看到实时输出:
/usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod --config /etc/mongod.conf --fork

上面的命令中保留了 --fork 选项,但通常为了调试,应该去掉 --fork 以在控制台查看实时日志输出。正确的调试命令应该是:
/usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod --config /etc/mongod.conf
运行此命令后,MongoDB 将尝试启动,并且任何错误消息都会直接打印到控制台。这些错误消息应该能帮助确定问题的根源。

常见的问题可能包括:

配置文件 /etc/mongod.conf 中的语法错误或配置错误。
MongoDB 数据目录的权限问题。
端口已被其他服务占用。
磁盘空间不足。
其他系统资源限制或依赖问题。


/etc/mongod.conf


processManagement:  
  fork: true  
systemLog:  
  destination: file  
  path: /var/log/mongodb.log  
  logAppend: true  
storage:  
  dbPath: /data/mongodb.db  
net:  
  port: 27017  
  bindIp: 0.0.0.0  # 允许任何IP连接,生产环境中请限制为特定IP或局域网  
security:  
  authorization: enabled  # 启用身份验证


这份配置文件做了以下设置:

processManagement.fork: true:指示 MongoDB 在后台运行作为守护进程。
systemLog:配置了日志记录,将日志输出到 /var/log/mongodb.log 文件,并设置为追加模式(logAppend: true)。
storage.dbPath:指定了数据库文件的存储路径为 /data/mongodb.db。
net:设置了 MongoDB 监听的端口为 27017,并且 bindIp 设置为 0.0.0.0,表示接受任何 IP 地址的连接。这在测试环境中是可以的,但在生产环境中应限制为特定的 IP 地址或局域网范围以提高安全性。
security.authorization:启用了身份验证,这意味着连接到 MongoDB 的客户端需要提供有效的用户名和密码。
请确保 /data/mongodb.db 目录存在且 MongoDB 用户有权写入,同时 /var/log/mongodb.log 也需要是可写的。如果这些目录或文件不存在或权限不正确,MongoDB 将无法正常启动。

此外,为了让 MongoDB 作为服务在 CentOS 7.9 上开机自启,还需要创建一个 systemd 服务单元文件,如之前所述。一旦创建了服务文件并启用了服务,MongoDB 就会在系统启动时自动运行。

最后,请确保MongoDB 安装是正确的,并且所有必要的依赖项都已满足。如果遇到任何问题,可以查看 MongoDB 的日志文件以获取更多信息。

在 /etc/systemd/system/ 目录下创建一个名为 mongod.service 的文件


[Unit]
Description=MongoDB Database Server  
After=network.target  
  
[Service]  
Type=forking  
ExecStart=/usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod --config /etc/mongod.conf
ExecStop=/usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod --shutdown --config /etc/mongod.conf
PrivateTmp=true  
  
[Install]  
WantedBy=multi-user.target



重新加载 systemd 配置:

在创建了新的服务文件或修改了现有的服务文件后,需要通知 systemd 重新加载其配置。

sudo systemctl daemon-reload

启用服务:

要让 MongoDB 在系统启动时自动运行,需要启用该服务。

sudo systemctl enable mongod

现在,可以手动启动 MongoDB 服务来测试配置是否正确:

sudo systemctl start mongod

检查 MongoDB 服务状态:

使用以下命令来验证 MongoDB 是否正在运行:

sudo systemctl status mongod

如果一切正常,状态应该会显示 MongoDB 正在运行。

设置开机自启(可选,因为在上一步启用服务时已经设置了):

如果之前没有启用服务,可以使用以下命令设置 MongoDB 在系统启动时自动运行:

sudo chkconfig mongod on

但请注意,chkconfig 命令在较新的系统上可能已被 systemctl 替代。因此,如果使用的是 CentOS 7 或更高版本,建议使用 systemctl enable mongod。

重启系统测试:

最后,可以重启系统来测试 MongoDB 是否会在启动时自动运行。

sudo reboot

系统重启后,使用 systemctl status mongod 来检查 MongoDB 是否已成功启动。

数据库操作

创建用户:

在MongoDB shell中,切换到admin数据库并创建一个用户管理员账户(如果还没有的话):

use admin; 
db.createUser({user: "admin", pwd: "admin_password", roles: [{role: "userAdminAnyDatabase", db: "admin"}]});

然后,使用新创建的管理员账户登录,并为commentDB数据库创建一个新用户:

db.auth("admin", "admin_password"); 
use commentDB; 
db.createUser({user: "abc", pwd: "123456", roles: [{role: "dbOwner", db: "commentDB"}]});

创建数据库:

在MongoDB中,数据库是在第一次存储数据时自动创建的。但是,您可以通过向数据库添加一些数据来手动“创建”它,例如:

use commentDB; 
db.auth("abc", "123456");
db.comments.insert({text: "Hello, MongoDB!"});

这将“创建”commentDB数据库(如果它还不存在的话)并在comments集合中插入一条记录。

外部连接

mongodb://abc:123456@ip地址:27017/commentDB?authMechanism=SCRAM-SHA-256&authSource=commentDB

mongosh

使用RPM包安装mongosh:
如果你选择使用RPM包来安装mongosh,你通常会得到一个已经编译好且包含了所有必要依赖(包括OpenSSL)的可执行文件。这意味着你不需要单独安装OpenSSL库,因为RPM包已经包含了所需的版本。
优点:安装简便,无需额外配置。
缺点:可能不包含最新版本的OpenSSL,这取决于RPM包的更新频率。
使用OpenSSL 1.1:
OpenSSL 1.1是一个稳定且广泛使用的加密库版本。如果你的系统中还没有安装OpenSSL,或者安装的是较旧版本,你可能需要手动安装或更新到OpenSSL 1.1。
优点:稳定性高,兼容性好。
缺点:可能不是最新的加密技术,需要手动安装或更新。
使用OpenSSL 3:
OpenSSL 3提供了最新的加密技术和安全特性。如果你的应用需要最高级别的安全性,或者你想利用OpenSSL 3提供的新功能,那么这是一个好选择。
优点:最新的加密技术和安全特性。
缺点:可能与某些旧系统或应用不完全兼容,需要手动安装。
对于大多数用户来说,使用RPM包安装mongosh是最简单的方法。它避免了手动安装和配置OpenSSL的复杂性,并且通常能够满足基本的安全需求。

然而,如果你对安全性有更高的要求,或者你的应用需要利用OpenSSL 3的最新特性,那么手动安装OpenSSL并配置mongosh以使用它可能是一个更好的选择。

在选择时,请考虑你的具体需求、系统的兼容性以及你愿意投入多少时间和精力来进行安装和配置。

注意:在进行任何安装或更新之前,请确保备份重要数据,并仔细阅读相关文档以了解可能的风险和注意事项。

至于下载时的选择,如果你决定使用RPM包安装mongosh,请从MongoDB官方网站下载适用于CentOS 7.9的RPM包。如果你选择手动安装OpenSSL并配置mongosh,你需要从OpenSSL的官方网站下载适当的版本(1.1或3),并按照相关指南进行安装和配置。

sudo rpm -ivh mongodb-mongosh-2.2.6.x86_64.rpm

创建用户

sudo useradd --system --shell /sbin/nologin --user-group mongodb

使用 chown 和 chmod 命令设置所有权和权限

sudo chown -R mongodb:mongodb /data/mongodb.db 
sudo chown mongodb:mongodb /var/log/mongodb.log  
sudo chmod -R 755 /data/mongodb.db 
sudo chmod 640 /var/log/mongodb.log

修改systemd 服务文件以指定新创建的用户和组

vim /etc/systemd/system/mongod.service
[Unit]  
Description=MongoDB Database Server  
After=network.target  
  
[Service]  
Type=forking  
User=mongodb  # 指定运行用户  
Group=mongodb  # 指定运行用户组,通常与用户名相同  
ExecStart=/usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod --config /etc/mongod.conf  
ExecStop=/usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod --shutdown --config /etc/mongod.conf  
PrivateTmp=true  
  
[Install]  
WantedBy=multi-user.target

重新加载 systemd 配置文件以使更改生效,并重启 MongoDB 服务

sudo systemctl daemon-reload  
sudo systemctl restart mongod

手动启动(不建议)

/usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod --config /etc/mongod.conf
sudo -u mongodb /usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod --config /etc/mongod.conf --fork
关闭
ps aux | grep mongod

systemctl启动

启动

sudo systemctl start mongod

设置 MongoDB 服务开机启动:

sudo systemctl enable mongod

这条命令会创建一个符号链接在 /etc/systemd/system/multi-user.target.wants/ 目录下,指向 MongoDB 的服务文件 /etc/systemd/system/mongod.service。这样,当系统启动时,MongoDB 服务就会自动启动。

验证开机启动设置:

您可以使用以下命令来检查 MongoDB 服务是否已设置为开机启动:

sudo systemctl is-enabled mongod

如果输出是 enabled,那么 MongoDB 服务就已经设置为开机启动了。

检查错误

sudo systemctl status mongod.service
 journalctl -u mongod.service
sudo journalctl -xe
sudo cat /var/log/mongodb.log  
# 或者  
sudo less /var/log/mongodb.log  
# 或者查看文件末尾的内容  
sudo tail -f /var/log/mongodb.log
ls -l /usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod  
sudo chown mongodb:mongodb /usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod  
sudo chmod +x /usr/tools/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin/mongod
Type=simple
要查看是谁或什么更改了这些命令的作用,您可以尝试以下方法:

审计日志:
如果您的系统启用了审计功能(如 auditd),您可以检查审计日志以查看是否有任何与 /data/mongodb.db 或 /var/log/mongodb.log 相关的权限更改事件。
SELinux 策略:
如果 SELinux 处于 Enforcing 模式,它可能会自动更改文件权限以确保符合策略。检查 SELinux 的状态和相关策略。
Cron 作业或系统服务:
检查是否有定期运行的 cron 作业或系统服务可能在后台更改了这些权限。查看 /etc/cron.*、/etc/cron.daily/、/etc/cron.hourly/、/etc/cron.weekly/ 和 /etc/cron.monthly/ 目录下的脚本,以及使用 systemctl list-timers 命令查看定时任务。
备份脚本:
如果您有定期运行的备份脚本,它们可能在备份过程中更改了文件或目录的权限。检查任何与 MongoDB 相关的备份脚本。
手动检查:
在 MongoDB 启动之前和之后,手动检查 /data/mongodb.db 和 /var/log/mongodb.log 的权限,以确定是否有任何更改。您可以使用 stat 命令来查看文件的详细属性,包括权限和所有权。
inotify 工具:
使用 inotifywait 工具来监控 /data/mongodb.db 和 /var/log/mongodb.log 的权限更改。这可以帮助您确定是哪个进程或脚本更改了这些设置。
最后,如果您无法确定是哪个进程或脚本更改了权限,并且这个问题反复出现,您可能需要考虑编写一个脚本或 cron 作业来定期检查和修复这些权限设置。但是,请注意,这只是一个临时解决方案,最好找到问题的根本原因并解决它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简 洁 冬冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值