MongoDB安装记录和错误解决
我使用的是RedHat 9.4 安装Mongodb
1 | [root@sea-whales ~]# cat /etc/redhat-release |
1. MongoDB安装
Mongodb有以下几种安装方式:
- 使用yum安装
- 手动下载并安装
- 使用docker安装
1.1 使用yum安装
一般情况推荐YUM安装,因为它可以确保您安装的是官方支持的最新版本,并且方便进行后续的更新和维护。
添加MongoDB官方YUM仓库
首先,需要创建一个新的YUM仓库配置文件,例如/etc/yum.repos.d/mongodb-org-7.0.repo
(注意版本号可能根据MongoDB的最新版本而变化)。
在该文件中,添加MongoDB的官方仓库信息,包括仓库名称、基础URL、GPG密钥等。
我使用的是mongodb-org-7.0
,所以我的配置文件如下:
1 | [root@sea-whales ~]# cat /etc/yum.repos.d/mongodb-org-7.0.repo |
注:可以将上面的版本号替换为希望安装的MongoDB版本号
- 安装依赖包到这里使用yum安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72[root@sea-whales ~]# yum install -y mongodb-org
[root@sea-whales ~]# sudo yum install -y mongodb-org
正在更新 Subscription Management 软件仓库。
上次元数据过期检查:4:10:05 前,执行于 2024年07月14日 星期日 07时04分06秒。
依赖关系解决。
=================================================================================================================================================================================================================
软件包 架构 版本 仓库 大小
=================================================================================================================================================================================================================
安装:
mongodb-org x86_64 7.0.12-1.el9 mongodb-org-7.0 9.3 k
安装依赖关系:
mongodb-database-tools x86_64 100.9.5-1 mongodb-org-7.0 28 M
mongodb-mongosh x86_64 2.2.12-1.el8 mongodb-org-7.0 56 M
mongodb-org-database x86_64 7.0.12-1.el9 mongodb-org-7.0 9.4 k
mongodb-org-database-tools-extra x86_64 7.0.12-1.el9 mongodb-org-7.0 14 k
mongodb-org-mongos x86_64 7.0.12-1.el9 mongodb-org-7.0 24 M
mongodb-org-server x86_64 7.0.12-1.el9 mongodb-org-7.0 35 M
mongodb-org-tools x86_64 7.0.12-1.el9 mongodb-org-7.0 9.3 k
事务概要
=================================================================================================================================================================================================================
安装 8 软件包
总下载:143 M
安装大小:642 M
下载软件包:
(1/8): mongodb-org-7.0.12-1.el9.x86_64.rpm 15 kB/s | 9.3 kB 00:00
(2/8): mongodb-org-database-7.0.12-1.el9.x86_64.rpm 12 kB/s | 9.4 kB 00:00
(3/8): mongodb-database-tools-100.9.5-1.x86_64.rpm 12 MB/s | 28 MB 00:02
(4/8): mongodb-org-database-tools-extra-7.0.12-1.el9.x86_64.rpm 14 kB/s | 14 kB 00:01
(5/8): mongodb-mongosh-2.2.12.x86_64.rpm 14 MB/s | 56 MB 00:03
(6/8): mongodb-org-tools-7.0.12-1.el9.x86_64.rpm 21 kB/s | 9.3 kB 00:00
(7/8): mongodb-org-server-7.0.12-1.el9.x86_64.rpm 12 MB/s | 35 MB 00:02
(8/8): mongodb-org-mongos-7.0.12-1.el9.x86_64.rpm 6.6 MB/s | 24 MB 00:03
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计 23 MB/s | 143 MB 00:06
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
安装 : mongodb-org-database-tools-extra-7.0.12-1.el9.x86_64 1/8
运行脚本: mongodb-org-server-7.0.12-1.el9.x86_64 2/8
安装 : mongodb-org-server-7.0.12-1.el9.x86_64 2/8
运行脚本: mongodb-org-server-7.0.12-1.el9.x86_64 2/8
Created symlink /etc/systemd/system/multi-user.target.wants/mongod.service → /usr/lib/systemd/system/mongod.service.
安装 : mongodb-org-mongos-7.0.12-1.el9.x86_64 3/8
安装 : mongodb-org-database-7.0.12-1.el9.x86_64 4/8
安装 : mongodb-mongosh-2.2.12-1.el8.x86_64 5/8
运行脚本: mongodb-database-tools-100.9.5-1.x86_64 6/8
安装 : mongodb-database-tools-100.9.5-1.x86_64 6/8
运行脚本: mongodb-database-tools-100.9.5-1.x86_64 6/8
安装 : mongodb-org-tools-7.0.12-1.el9.x86_64 7/8
安装 : mongodb-org-7.0.12-1.el9.x86_64 8/8
运行脚本: mongodb-org-7.0.12-1.el9.x86_64 8/8
验证 : mongodb-database-tools-100.9.5-1.x86_64 1/8
验证 : mongodb-mongosh-2.2.12-1.el8.x86_64 2/8
验证 : mongodb-org-7.0.12-1.el9.x86_64 3/8
验证 : mongodb-org-database-7.0.12-1.el9.x86_64 4/8
验证 : mongodb-org-database-tools-extra-7.0.12-1.el9.x86_64 5/8
验证 : mongodb-org-mongos-7.0.12-1.el9.x86_64 6/8
验证 : mongodb-org-server-7.0.12-1.el9.x86_64 7/8
验证 : mongodb-org-tools-7.0.12-1.el9.x86_64 8/8
已更新安装的产品。
已安装:
mongodb-database-tools-100.9.5-1.x86_64 mongodb-mongosh-2.2.12-1.el8.x86_64 mongodb-org-7.0.12-1.el9.x86_64 mongodb-org-database-7.0.12-1.el9.x86_64
mongodb-org-database-tools-extra-7.0.12-1.el9.x86_64 mongodb-org-mongos-7.0.12-1.el9.x86_64 mongodb-org-server-7.0.12-1.el9.x86_64 mongodb-org-tools-7.0.12-1.el9.x86_64
完毕!mongodb
就完成了
1.2 手动下载安装
不推荐,因为需要补充各种依赖包,手动下载MongoDB的RPM包并使用rpm或yum localinstall
命令进行安装。这种方法需要您从MongoDB官网或其他可靠源下载适用于Red Hat 9.4的RPM包。
打开MongoDB的官方网站,并导航到MongoDB下载页面。通常,可以在首页的导航栏中找到“Download”或“Downloads”链接。
在下载页面上,根据操作系统版本(Red Hat Enterprise Linux 9.x
或兼容的发行版)和架构(x86_64
)选择适合的MongoDB RPM包。注意,MongoDB提供了社区版和企业版,这里我们以社区版为例。
点击下载按钮开始下载RPM包。下载完成后,将在浏览器指定的下载位置找到该RPM包文件,文件名可能类似于mongodb-org-server-7.0.12-1.el9.x86_64.rpm
使用rpm命令安装
将包放到Linux系统目录中,我这里是放在了/home/ftp
目录下,cd
命令切换到/home/ftp
目录下
1 | cd /home/ftp |
使用rmp命令安装MongoDB
1 | sudo rpm -ivh mongodb-org-server-7.0.12-1.el9.x86_64.rpm |
这里,-i
表示安装,-v
表示详细输出,-h
表示显示安装进度。
注意:如果安装过程中提示缺少依赖项,可以按照上面yum安装过程中的输出继续下载依赖,进行安装,可能需要先安装这些依赖项,或者考虑使用yum localinstall
命令来自动解决依赖问题。
使用yum localinstall
命令安装
yum localinstall
命令实际上是yum
的一个别名,用于安装本地RPM包并自动解决依赖关系。
1 | sudo yum localinstall mongodb-org-server-7.0.12-1.el9.x86_64.rpm |
yum
会检查RPM包的依赖项,并尝试从配置的仓库中下载并安装缺失的依赖项。
1.3使用Docker安装
如果系统已经安装了Docker,可以通过Docker来安装MongoDB。这种方式的好处是可以轻松地在容器中运行MongoDB,便于版本控制和隔离。(由于本文主要讲介绍MongoDB,所以这里就不详细介绍Docker的安装和配置了)
拉取MongoDB镜像
使用docker pull命令拉取MongoDB镜像:
1 | docker pull mongo:latest |
或者指定版本号拉取特定版本的MongoDB镜像。
会有输出如下:
1 | [root@sea-whales ~]# docker pull mongo:latest |
启动MongoDB
到这里我们基本就是已经安装好Mongodb了,如果只是内部使用就直接启动就好了,MongoDB已经给出了默认配置,只需要启动就可以使用,执行下面命令启动MongoDB并且查看状态,当然只有yum安装的和手动下载安装的才能使用,Docker安装的无法使用下面的命令进行查看,要依赖docker的命令进行查看;
1 | [root@sea-whales ~]# systemctl start mongod |
运行MongoDB容器
如果是使用docker安装的则使用docker run
命令运行MongoDB容器,并指定必要的参数,如端口映射、数据卷等
1 | docker run --name mongodb-container -d -p 27017:27017 mongo |
这里-p 27017:27017
表示将容器的27017端口映射到宿主机的27017端口。
使用docker ps
命令查看正在运行的容器,确认MongoDB容器已启动。
使用MongoDB客户端连接到容器中的MongoDB实例。
配置MongoDB
MongoDB的配置文件通常位于/etc/mongod.conf
,可以通过编辑该文件来配置MongoDB的行为。
通用配置
systemLog:
- destination: 指定日志输出的目标,如
file
或syslog
。 - path: 日志文件的路径(如果
destination
是file
)。 - logAppend: 是否追加到日志文件,默认为
true
。
- destination: 指定日志输出的目标,如
storage:
- dbPath: 数据文件的存储路径。
- journal:
- enabled: 是否启用journaling,用于数据恢复。
- engine: 存储引擎类型,如
wiredTiger
。
net:
- port: MongoDB监听的端口号,默认为27017。
- bindIp: MongoDB绑定的IP地址,默认为
127.0.0.1
(仅限本地访问)。
security:
- authorization: 是否启用访问控制,
enabled
表示需要认证。 - keyFile: 集群内部身份验证使用的密钥文件路径。
- authorization: 是否启用访问控制,
replication:
- replSetName: 复制集的名称,用于设置复制集。
processManagement:
- fork: 是否以守护进程方式运行MongoDB,对于生产环境推荐设置为
true
。 - pidFilePath: 进程ID文件的路径。
- fork: 是否以守护进程方式运行MongoDB,对于生产环境推荐设置为
operationProfiling:
- mode: 性能分析的模式,如
slowOp
(仅记录慢操作)。 - slowOpThresholdMs: 慢操作的阈值(毫秒)。
- mode: 性能分析的模式,如
示例
以下是我使用一个简化的/etc/mongod.conf
配置文件:
1 | # MongoDB配置文件 |
注意,应该根据自己的需求和MongoDB的版本来调整这些配置。要查看所有可用的配置项及其当前值,可以直接查看/etc/mongod.conf
文件,或者使用MongoDB的--config
选项与mongod
命令结合来指定一个配置文件,并通过--verbose
选项获取更多输出信息。
但是,请注意,--verbose
选项通常用于命令行启动MongoDB时增加日志输出的详细程度,而不是直接列出配置文件中的所有配置项。要列出所有配置项及其默认值,可能需要查阅MongoDB的官方文档。
配置好之后需要执行下面的命令使得配置生效
1 | [root@sea-whales ~]# sudo systemctl daemon-reload |
如果修改后不执行daemon-reload
就直接执行restart
命令,可能有一个警告,提示你要你先执行daemon-reload
,然后再执行restart
命令。
1 | [root@sea-whales ~]# sudo systemctl restart mongod |
Docker安装后配置MongoDB
docker安装mongodb后,需要修改配置文件的话需要进行一些操作,一般有两种方法:
方法一:直接编辑容器内的配置文件
定位配置文件:
MongoDB的配置文件通常位于容器内的/etc/mongod.conf
路径下。复制配置文件到本地:
使用docker cp
命令将容器中的配置文件复制到本地,以便进行修改。命令格式如下:1
docker cp <容器ID或名称>:/etc/mongod.conf /path/to/local/mongod.conf
这里
<容器ID或名称>
是MongoDB容器的ID或名称,/path/to/local/mongod.conf
是本地文件系统的目标路径。修改配置文件:
使用文本编辑器(如Vim、Nano、Sublime Text等)打开复制到本地的mongod.conf
文件,并修改需要的配置项。常见的配置项包括端口号、数据存储路径、日志级别等。将修改后的配置文件复制回容器:
使用docker cp
命令将修改后的配置文件复制回容器中的原始位置。命令格式如下:1
docker cp /path/to/local/mongod.conf <容器ID或名称>:/etc/mongod.conf
重启MongoDB容器:
使用docker restart
命令重启MongoDB容器,使修改生效。命令格式如下:1
docker restart <容器ID或名称>
方法二:使用Docker卷(Volume)映射配置文件
这种方法不需要进入容器内部,而是通过Docker卷将宿主机上的目录映射到容器内的配置文件目录。
在宿主机上创建配置文件:
在宿主机上创建一个目录,用于存放MongoDB的配置文件。例如,创建/path/to/mongodb/config
目录,并将MongoDB的配置文件(如mongod.conf
)放入该目录中。启动MongoDB容器时使用卷映射:
在启动MongoDB容器时,使用-v
或--volume
参数将宿主机上的配置文件目录映射到容器内的配置文件目录。例如:1
docker run -d --name mongodb -p 27017:27017 -v /path/to/mongodb/config:/etc/mongod.conf mongo:latest
注意:这里的映射路径可能需要根据实际情况进行调整,因为MongoDB的配置文件通常位于
/etc/mongod.conf
,但上述命令中的映射可能会覆盖整个/etc/mongod.conf
文件而不是目录。实际上,你可能需要创建一个包含mongod.conf
的目录,并将其映射到容器内的相应目录,如/etc/mongodb
(这取决于MongoDB容器内部的目录结构)。正确的命令可能类似于:1
docker run -d --name mongodb -p 27017:27017 -v /path/to/mongodb/config:/etc/mongodb mongo:latest
并确保宿主机上的
/path/to/mongodb/config
目录中包含mongod.conf
文件。重启MongoDB容器(如果容器已经运行):
如果MongoDB容器已经在运行,并且你想要应用新的配置文件,你需要先停止容器,删除旧的容器(可选,但推荐以避免配置冲突),然后使用新的配置文件重新创建并启动容器。
注意事项
- 在修改配置文件之前,建议备份原始配置文件,以防万一需要恢复。
- 确保修改后的配置文件语法正确,并且符合MongoDB的要求。
- 如果使用Docker卷映射配置文件,请确保宿主机上的配置文件路径和容器内的映射路径正确无误。
- MongoDB的配置项非常多,具体可配置的选项请参考MongoDB的官方文档。
访问MongoDB
访问基本以及使用这边就不多描述了,基本的操作就是通过mongo命令行工具来操作数据库了,具体操作可以参考官方文档。
2. MongoDB错误解决
错误1:MongoDB启动失败
错误原因:MongoDB启动失败,可能是端口被占用,也可能是MongoDB的配置文件错误。
解决方法:
- 检查端口是否被占用
1
lsof -i:27017
- 修改MongoDB的配置文件
修改MongoDB的配置文件,将端口号改为其他端口号,例如:27018 - 重启MongoDB
错误2:
我遇到一个错误就是在修改MongoDB的配置文件的bindIp
项目为0.0.0.0
后,重启MongoDB的时候出现了如下错误:
1 | [root@sea-whales ~]# sudo systemctl status mongod |
然后就算我修改回127.0.0.1
后也是是报告一样的错误;
通过查询以下是AI给出的分析:
从您提供的日志信息来看,MongoDB 服务在启动时遇到了问题,并且以状态码 14 退出。状态码 14 通常不是一个标准的 MongoDB 退出码,但在某些情况下,它可能与系统级的问题或 MongoDB 试图执行某些不被允许的操作有关。这里有几个可能的解决步骤和检查点:
- 检查 MongoDB 配置文件:
- 确保 MongoDB 的配置文件(如
/etc/mongod.conf
或指定的配置文件路径)没有错误。- 检查配置文件中的路径设置(如
dbPath
和logPath
)是否正确,且 MongoDB 进程有权限访问这些路径。
- 查看 MongoDB 日志文件:
- MongoDB 的日志文件通常会提供更多关于为什么服务无法启动的详细信息。检查
/var/log/mongodb/mongod.log
或您配置文件中指定的日志路径。
- 检查系统资源:
- 确保系统有足够的磁盘空间、内存和 CPU 资源来运行 MongoDB。
- 检查是否有其他服务或进程占用了 MongoDB 所需的端口(默认是 27017)。
- 检查 SELinux 或 AppArmor 设置:
- 如果您的系统启用了 SELinux 或 AppArmor,它们可能会阻止 MongoDB 正常启动。检查相关的安全策略或暂时禁用它们以测试是否是安全设置导致的问题。
- 检查 MongoDB 权限:
- 确保 MongoDB 的可执行文件(如
/usr/bin/mongod
)和数据库文件目录的权限设置正确。- MongoDB 通常需要 root 权限来绑定到低端口(如 27017),但建议通过 systemd 或其他服务管理工具以非 root 用户身份运行。
- 检查 systemd 单元文件:
- 查看
/usr/lib/systemd/system/mongod.service
文件中的ExecStart
行,确保$OPTIONS
变量正确设置,并且没有语法错误。- 尝试手动运行 MongoDB 服务命令(如
/usr/bin/mongod --config /etc/mongod.conf
)来检查是否可以直接从命令行启动。
- 重新启动 MongoDB 服务:
- 在进行任何更改后,尝试重新启动 MongoDB 服务:
sudo systemctl restart mongod.service
。
- 查看系统日志:
- 检查
/var/log/syslog
或其他系统日志文件,看是否有与 MongoDB 相关的更详细的错误消息。
如果上述步骤都不能解决问题,您可能需要考虑重新安装 MongoDB 或寻求更具体的帮助,例如在 MongoDB 社区论坛或支持渠道中询问。
于是我尝试使用/usr/bin/mongod -f /etc/mongod.conf
启动,然后在另一个终端执行tail -f /var/log/mongodb/mongod.log
命令进行日志的实时查看,也没发现任何报错信息。
通过各种尝试,最后居然是因为MongoDB
数据目录的权限和所有权正确,只需要执行下面两句命令后,在进行重启就可以正常启动了;
1 | [root@sea-whales ~]# sudo chown -R mongod:mongod /var/lib/mongo |
这个问题是我没想到的,因为在前面安装之后MongoDB是可以正常启动的,但是后来我修改了MongoDB的配置文件,然后重启了MongoDB,就出现了这个错误,都没想到会是因为权限的问题。
分析
经过一些回想,我想到了原来在安装的时候MongoDB我是使用root进行安装的,所以权限是默认的,但是后来
我在做服务的时候默认将mongod服务以mongod用户和组的权限运行,就是下面配置文件中 [Service]
中的User
和Group
配置项,导致权限问题,所以导致无法启动服务;
1 | [root@sea-whales ~]# cat /usr/lib/systemd/system/mongod.service |