开源地址:https://github.com/mongodb/mongo
下载地址:https://www.mongodb.com/try/download/community
一、MongoDB介绍
1.简介
MongoDB是一个基于分布式文件存储的 NoSQL 数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2.优缺点
优点:
- **文档存储(Document-Oriented):**数据以 BSON 格式(类似 JSON)存储,支持嵌套文档和数组,结构灵活;无需预先定义数据模式(Schema-free),非常适合处理复杂和动态变化的数据结构。
- **高性能:**通过索引支持快速查询;原生支持水平扩展(sharding)和内存映射存储,提高读写性能。
- **高可扩展性:**MongoDB 天然支持分布式架构,可以通过 分片(Sharding) 处理大规模数据和高并发请求。
- **灵活查询:**支持丰富的查询语言,包括条件查询、正则表达式、聚合操作、地理空间查询等;聚合框架功能强大,可用于数据分析。
- **支持副本集(Replica Set):**提供高可用性,通过多个节点实现自动故障转移和数据冗余。
- **跨平台:**支持多种操作系统(如 Windows、Linux、macOS)和多种语言驱动(如 Python、Java、Node.js)。
缺点:
- 相比关系型数据库,在传统事务处理和复杂联表查询场景中表现稍弱。
- 占用存储空间较大,因为 BSON 格式会增加额外的元数据。
3.使用场景
- **实时分析:**如日志数据分析、IoT 数据处理。
- **内容管理系统:**适合存储非结构化和半结构化数据,如文章、评论等。
- **电商应用:**高并发访问场景,快速读取和存储购物车、订单等数据。
- **游戏开发:**存储玩家信息、实时状态和历史记录。
4.对比关系型数据库(如 MySQL)
特性 | MongoDB | MySQL |
---|---|---|
数据模型 | 文档 | 表 |
数据结构 | 灵活(无 Schema 或弱 Schema) | 固定 Schema |
水平扩展性 | 支持 Sharding | 较复杂 |
事务支持 | 支持多文档 ACID 事务(4.0+ 版本) | 强事务支持 |
复杂查询 | 支持多种查询和聚合 | 支持复杂 SQL 查询 |
二、安装MongoDB
这里安装的版本为
4.0.28
。
1.创建安装目录
mkdir -p /data/mongodb
2.下载并解压MongoDB源码包
下载 MongoDB 源码包,并指定解压到 /data/mongodb
目录下:
cd /usr/local/src
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.28.tgz
tar -xzf mongodb-linux-x86_64-rhel70-4.0.28.tgz -C /data/mongodb
3.创建软链接
进入 MongoDB 安装目录,为源码创建一个软链接到 mongodb
目录:
cd /data/mongodb
ln -s mongodb-linux-x86_64-rhel70-4.0.28 mongodb
4.创建数据目录
在软链接目录路径下创建 MongoDB 所需的数据目录:
mkdir /data/mongodb/mongodb/{
conf,data,logs}
5.配置环境变量
设置 MySQL 可执行文件所在路径为环境变量:
cat >> /etc/profile <<'EOF'
# mongodb
export MONGODB_HOME=/data/mongodb/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
EOF
执行生效:
source /etc/profile
6.验证版本
配置完成后,可执行以下命令验证版本:
mongo --version
# 显示版本
MongoDB shell version v4.0.28
git version: af1a9dc12adcfa83cc19571cb3faba26eeddac92
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
distmod: rhel70
distarch: x86_64
target_arch: x86_64
三、配置MongoDB
1.创建MongoDB配置文件
在软链接目录路径下创建 MongoDB 的主配置文件,添加以下内容:
cat > /data/mongodb/mongodb/conf/mongodb.conf <<'EOF'
systemLog:
destination: file
logAppend: true
path: /data/mongodb/mongodb/logs/mongodb.log
storage:
dbPath: /data/mongodb/mongodb/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /data/mongodb/mongodb/bin/mongodb.pid
net:
bindIp: 0.0.0.0
port: 27017
maxIncomingConnections: 65536
wireObjectCheck: true
operationProfiling:
slowOpThresholdMs: 100
mode: off
security:
authorization: enabled
EOF
解释说明:
systemLog
:日志配置。
destination: file
:表示日志将记录到文件中。logAppend: true
:日志以追加模式写入,而不是覆盖之前的日志。path
:指定日志文件的路径,这里日志存储在/data/mongodb/mongodb/logs/mongodb.log
中。storage
:存储配置。
dbPath: /data/mongodb/mongodb/data
:指定 MongoDB 数据库文件存储的路径。journal: enabled: true
:启用持久化日志(Journal)。在发生意外崩溃时,Journal 日志可以用于数据恢复,提高数据安全性。processManagement
:进程管理配置。
fork: true
:启动 MongoDB 时以守护进程模式运行(后台运行)。pidFilePath: /data/mongodb/mongodb/bin/mongodb.pid
:指定进程 ID 文件的路径,用于记录 MongoDB 的运行进程 ID。net
:网络配置。
bindIp: 0.0.0.0
:指定 MongoDB 监听的 IP 地址,0.0.0.0
表示接受来自所有 IP 的连接。如果要限制访问,可以设置为特定的 IP(如127.0.0.1
)。port: 27017
:指定 MongoDB 的服务端口,默认是27017
。maxIncomingConnections: 65536
:设置最大并发连接数为 65536,提高高并发处理能力。wireObjectCheck: true
:启用 BSON 数据格式检查,确保传输的数据格式正确。operationProfiling
:操作性能分析配置。
slowOpThresholdMs: 100
:定义慢查询的阈值为 100 毫秒,超过此时间的操作会被标记为慢操作。mode: off
:禁用操作性能分析(Profiling)。可选值包括:
off
:禁用。slowOp
:仅记录慢操作。all
:记录所有操作。security
:安全配置。
authorization: enabled
:启用用户验证,必须提供有效的用户名和密码才能访问数据库。
2.配置启动服务
创建一个名为 mongodb.service
的 systemd 服务单元文件,用于管理 MongoDB 服务,存放于 /etc/systemd/system
目录下,并添加以下内容:
cat > /etc/systemd/system/mongodb.service <<'EOF'
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
User=root
Group=root
Environment="OPTIONS=-f /data/mongodb/mongodb/conf/mongodb.conf"
ExecStart=/data/mongodb/mongodb/bin/mongod $OPTIONS
ExecStop=/data/mongodb/mongodb/bin/mongod -shutdown $OPTIONS
PermissionsStartOnly=true
PIDFile=/data/mongodb/mongodb/bin/mongodb.pid
Type=forking
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000
LimitMEMLOCK=infinity
TasksMax=infinity
TasksAccounting=false
[Install]
WantedBy=multi-user.target
EOF
解释说明:
Environment
:定义环境变量OPTIONS
,传递配置文件路径参数给mongod
。ExecStart
:定义服务启动命令,mongod
加载配置文件路径参数启动 MongoDB。ExecStop
:定义服务停止命令,使用-shutdown
选项安全关闭 MongoDB 实例。PermissionsStartOnly
:限制权限配置,仅在启动时生效。PIDFile
:指定存储 MongoDB 进程 ID 的文件路径,便于管理和监控。Type
:指定服务启动类型为forking
,表明mongod
将在启动后创建一个子进程并以守护进程方式运行。LimitFSIZE=infinity
:文件大小无限制。LimitCPU=infinity
:CPU 使用时间无限制。LimitAS=infinity
:虚拟内存分配无限制。LimitNOFILE=64000
:最大打开文件数为 64000。LimitNPROC=64000
:最大进程数为 64000。LimitMEMLOCK=infinity
:内存锁定无限制。TasksMax=infinity
:任务数无限制。TasksAccounting=false
:禁用任务数计数。
3.启动MongoDB服务
配置完成后,启动 MongoDB 服务:
systemctl daemon-reload # 加载systemd服务配置
systemctl start mongodb # 启动mongodb服务
systemctl enable mongodb # 设置开机自启服务
4.测试MongoDB
直接执行 mongo
命令测试是否能够成功进入:
[root@localhost /root]# mongo
MongoDB shell version v4.0.28
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session {
"id" : UUID("62b61afe-6d23-43c9-9731-d48e6d57b717") }
MongoDB server version: 4.0.28
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
> show dbs
> db
test
> quit()
5.创建admin管理员用户
MongoDB 在创建用户时,均需进入
admin
数据库里操作。
5.1 修改MongoDB配置文件
创建 MongoDB 用户前,需要先将 mongodb.conf
配置文件中的认证参数 authorization
改为 disabled
:
sed -i 's/authorization: enabled/authorization: disabled/g' /data/mongodb/mongodb/conf/mongodb.conf
修改完成后,重启 MongoDB 服务生效:
systemctl restart mongodb
5.2 登录并创建管理员用户
直接执行 mongo
命令登录到 MongoDB: