MongoDB
MongoDB介绍
MongoDB而是一款基于“分布式存储”的非关系型数据库(NoSQL),是一款专为扩展性、高性能和高可用而设计的数据库,它可以从单节点部署扩展到大型、复杂的多数据中心架构,也能提供高性能的数据读写操作;而且提供了数据复制、无感知的故障自动选主等功能,从而实现数据节点高可用。
核心存储格式:BSON
全称:Binary JSON(二进制JSON)。
优势:存储和扫描效率高于普通JSON。
代价:空间占用更大。
扩展:在JSON基础上增加了更多数据类型和元数据描述。
2. 半结构化特性
结构性:BSON保留JSON特性,可便捷存储复杂嵌套数据(如数组、对象)。
灵活性(与关系型数据库对比):
关系型数据库(强结构化):需预先定义表结构,字段必须一一对应,结构变更时插入会报错,修改繁琐。
MongoDB(半结构化):无需预定义结构,同一集合(Collection)中的文档(Document)可以有不同的字段,适应灵活多变的数据模型。
3. 文档型数据库
基本单位:数据以文档(Document)形式存储,文档由一组 K-V(键值对)组成。
组成规则:
Key:必须是字符串。
Value:可以是任意BSON支持的类型(字符串、数值、数组、嵌套文档等)。
直观理解:可以把一个MongoDB文档看作一个JSON对象。
4. 与MySQL的逻辑结构对比
核心理念:两者层级结构类似,只是术语和具体实现细节不同。MongoDB中的“集合”对应MySQL的“表”,“文档”对应“行”。
MongoDB安装
MongoDB环境搭建
# 创建MongoDB目录
mkdir -p /usr/local/mongodb/
# 切换目录(可以文件包上传或wget下载)
cd /usr/local/mongodb/
# wget下载6.0.8版本(下载不了就去网页下载然后上传)
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-6.0.8.tgz
# 解压对应目录
tar -xvzf mongodb-linux-x86_64-rhel80-6.0.8.tgz
# 并重命名
mv mongodb-linux-x86_64-rhel80-6.0.8 mongodb6.0.8
# 为了方便启动,咱们可以将bin目录拷贝出来
cp -a mongodb6.0.8/bin /usr/local/mongodb/bin
# 创建单机版MongoDB存储配置文件、数据、日志的目录
mkdir -p /usr/local/mongodb/data/standalone
mkdir -p /usr/local/mongodb/log/standalone
mkdir -p /usr/local/mongodb/conf/standalone
## 注释:
data/standalone 存放数据文件(集合数据、索引数据)
log/standalone 存放运行日志
conf/standalone 存放配置文件
# 编写MongoDB核心配置文件(没有会自动创建)
vim /usr/local/mongodb/conf/standalone/mongodb.conf
# yaml配置,及注释含义(注释可以复制不影响)
# ========== 日志配置 ==========
systemLog:
destination: file # 日志输出到文件(而非控制台)
path: "/usr/local/mongodb/log/standalone/mongodb.log"
logAppend: true # 重启时追加日志(false = 覆盖)
# ========== 数据存储配置 ==========
storage:
dbPath: "/usr/local/mongodb/data/standalone"
# ========== 进程管理配置 ==========
processManagement:
fork: true # 以后台守护进程方式运行
# ========== 网络配置 ==========
net:
bindIp: 0.0.0.0 # 监听所有网卡(生产环境换成具体 IP)
port: 27017 # 默认端口
## 注释:
各配置项的作用:
systemLog.destination: file —— 将日志写入文件,比输出到控制台更便于排查问题
systemLog.logAppend: true —— 追加模式,重启不会清空旧日志
storage.dbPath —— MongoDB 所有数据(集合、索引、日志)都存储在这个目录下
processManagement.fork: true —— 将进程放到后台运行,终端关闭后服务不中断
net.bindIp: 0.0.0.0 —— 0.0.0.0 表示监听本机所有 IP;生产环境应改为具体内网 IP,避免暴露到公网
# 启动服务(已设置环境变量)(无法启动运行兼容问题看下面)
mongod -f /usr/local/mongodb/conf/standalone/mongodb.conf
# 验证进程是否正常
ps aux | grep mongod
# 查看端口是否在监听
ss -tlnp | grep 27017为旧版 MongoDB 补充它所需的 OpenSSL 1.1 运行环境
# 从阿里云镜像获取稳定版本下载 OpenSSL 1.1 RPM 包(在可联网的机器上执行)
ALIYUN_BASE="https://mirrors.aliyun.com/centos/8.5.2111/BaseOS/x86_64/os/Packages/"
wget ${ALIYUN_BASE}openssl-libs-1.1.1k-5.el8_5.x86_64.rpm
wget ${ALIYUN_BASE}openssl-1.1.1k-5.el8_5.x86_64.rpm
# 安装 OpenSSL 1.1 库(在目标 RHEL 9 服务器上执行)
# 先安装 libs
rpm -ivh --nodeps --force openssl-libs-1.1.1k-5.el8_5.x86_64.rpm
# 再安装主程序
rpm -ivh --nodeps --force openssl-1.1.1k-5.el8_5.x86_64.rpm
# 刷新动态链接库缓存(至关重要)
ldconfig
# 验证库是否可用
ldconfig -p | grep libssl.so.1.1
## 注意:
安全风险:你安装的 OpenSSL 1.1.1k 是较旧版本,包含已知安全漏洞。客户端工具
到了MongoDB6.x版本,官方不再默认内置Shell客户端工具,想要使用则需额外下载:官方Shell工具,这里咱们照样以wget方式下载:
# 下载
wget https://downloads.mongodb.com/compass/mongosh-1.10.3-linux-x64.tgz
# 解压
tar -zxvf mongosh-1.10.3-linux-x64.tgz
# 拷贝bin目录下的Shell工具,放到原本的bin目录中
cp /usr/local/mongodb/mongosh-1.10.3-linux-x64/bin/mongosh /usr/local/mongodb/bin/
# 再通过mongosh来连接测试(已设置环境变量)
mongosh -port 27017
test> show dbs;
# 如果上述操作执行完成后,能正常显示三个默认库,说明MongoDB安装成功。
admin 40.00 KiB
config 12.00 KiB
local 40.00 KiB关闭MongoDB服务,这里有三种方式
# 1.通过启动项来关闭(已设置环境变量)
mongod --shutdown -f /usr/local/mongodb/conf/standalone/mongodb.conf
# 2.先通过客户端连接MongoDB服务,再进入admin库关闭(执行完后客户端会报连接出错)
mongosh -port 27017
test> use admin;
test> db.shutdownServer();
# 3.通过kill命令+进程号强杀进程(不推荐)
一般推荐使用前面两种,因为kill强杀进程,可能会导致数据损坏
kill -9 [pid]
# 如果损坏则需手动修复:
# 先删除数据目录下的所有锁文件
rm -rf /usr/local/mongodb/data/standalone/*.lock
# 再通过启动项对数据目录进行修复
mongod --repair --dbpath=/usr/local/mongodb/data/standalone外部连接操作
为了外部可以连接,需要开放MongoDB端口、更新防火墙(关闭防火墙也行):
# 在 public 区域添加规则:永久开放 TCP 端口 27017
firewall-cmd --zone=public --add-port=27017/tcp --permanent
# 重新加载防火墙配置,使新规则立即生效
firewall-cmd --reload
# 列出 public 区域当前所有已开放的端口
firewall-cmd --zone=public --list-ports
原创
MongoDB概念及安装
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法