MongoDB

1. 简介

MongoDB是一个基于分布式文件存储的文档型数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
具有高性能,易部署,易使用等特点。支持索引,复制和数据恢复。Mongo支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
目前在大数据、内容管理、持续交付、移动应用、社交应用、用户数据管理、数据中心等领域皆有广泛被使用。

备注:BSON
全称:Binary JSON,它的语法跟 JSON 几乎一模一样,只是支持的类型比 JSON 多,除了数字、布尔、数组等之外,还支持 ObjectID、Double、Date等类型。

架构图:

MongoDB数据架构.webp
1667898764759.jpg

MongoDB相对于RDBMS的优势

RDBMS:关系数据库管理系统,是 SQL 语言以及所有现代数据库系统(例如 SQL Server、DB2、Oracle、MySQL 和 Microsoft Access)的基础。

  • 无固定结构 。
  • 数据结构由键值(key=>value)对组成。MongoDB 的文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组,单个对象的结构是清晰的。
  • 没有复杂的表连接。不需要维护表与表之间的内在关联关系。
  • 查询功能强大。MongoDB的查询功能几乎与SQL一样强大,使用基于文档的查询语言,可以对文档进行动态查询。
  • 易于调优和扩展。具备高性能、高可用性及可伸缩性等特性
  • 应用程序对象与数据库对象天然对应。
  • 可以基于内存存储或者硬盘文件存储,提供丰富的查询操作和索引支持,也有事务操作,可以更快地更稳定的访问数据。

技术优势总结:
json 结构和对象模型接近,开发代码量低;
json 的动态模型意味着更容易响应新的业务需求;
复制集提供99.999%高可用;
分片架构支持海量数据和无缝扩容;

Sql与Mongodb术语对比

SQLMongodb描述
库(database)库(database)
表(Talbe)集合(Collection)
行/记录(Row)文档(Document)Document就是json结构的一条数据记录
列/字段(Col)字段/键/域(Field)
主键(Primary Key)对象ID(ObjectId)_id: ObjectId(“10c191e8608f19729507deea”)
索引(Index)索引(Index)也有普通索引, 唯一索引这么区分的

参考文档:
https://zhuanlan.zhihu.com/p/497736109?utm_medium=social&utm_oi=639733965527846912

2. 部署安装

官方下载地址:
https://www.mongodb.com/try/download/community

2.1 docker-compose 部署

2.1.1 设置文件目录

在 /opt下创建 docker-mongoDB目录
并在 docker-mongoDB目录下创建 data 和 logs 目录并授权
chmod 777 data chmod 777 logs

2.1.2 编写 docker-compose.yml文件

在 docker-mongoDB目录下 vim docker-compose.yml

version: '3'   #指定版本
services:   #服务
  mongodb:
    container_name: mongodb   #定义容器名
    image: mongo:4.4.6   #定义镜像,由于5之后的版本有CPU AVX指令集的限制,所以只能使用版本4
    ports:   
      - 27017:27017   #定义端口
    restart: always   #重启策略
    environment:   #环境变量
      TZ: Asia/Shanghai   #指定时区
      MONGO_INITDB_ROOT_USERNAME: root   
      MONGO_INITDB_ROOT_PASSWORD: root
    volumes:   #挂载
      - /opt/docker-mongoDB/data:/data/db   #挂载数据目录
      - /opt/docker-mongoDB/logs:/var/log/mongodb   #挂载日志目录

2.1.3 启动

docker-compose up -d
启动成功
image.png

2.1.4 使用 Navicat 连接测试

输入相关信息,点击测试连接,出现连接成功即可。
image.png
连接参数介绍
stand alone:独立的
shard cluster:分片集群
replica set:复制集

2.2 apt 安装部署

2.2.1 备份源文件

安装之前建议更新下Linux源。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

2.2.2 添加源到 sources.list 中

sudo vim etc/apt/sources.list
在打开的文本中,添加阿里源(加在最后即可)。

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

2.2.3 更新源

sudo apt-get update

2.2.4 安装依赖包

sudo apt-get install libcurl4 openssl

2.2.5 关闭和卸载原有的mongodb

如果系统中之前有安装过mongodb,先关闭并卸载,没有直接略过此步
关闭mongodb service mongodb stop
卸载mongodb sudo apt-get remove mongodb

2.2.6 导入包管理系统使用的公钥

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
如果命令执行结果没有显示OK,则先执行此命令 sudo apt-get install gnupg,之后在重新执行上面的 wget 命令。

2.2.7 注册mongodb源

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse"| sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

2.2.8 更新源

sudo apt-get update

2.2.9 安装mongodb

这里安装4.4版本。
sudo apt-get install -y mongodb-org=4.4.2 mongodb-org-server=4.4.2 mongodb-org-shell=4.4.2 mongodb-org-mongos=4.4.2 mongodb-org-tools=4.4.2

# 安装过程中如果提示: 
mongodb-org-tools : 依赖: mongodb-database-tools 但是它将不会被安装

运行以下命令解决:
sudo apt-get autoremove mongodb-org-mongos mongodb-org-tools mongodb-org
sudo apt-get install -y mongodb-org=4.4.2

2.2.10 创建数据存储目录

sudo mkdir -p /data/db

2.2.11 修改配置,开放27017端口

sudo vim /etc/mongod.conf
如果端口号被注释了,将#去掉,开放27017端口。
image.png

2.2.12 启动和关闭MongoDB

# 重新加载配置,并启动mongodb
sudo systemctl daemon-reload
sudo systemctl start mongod
# 查看运行状态
sudo systemctl status mongod
# 设置为开机自启
sudo systemctl enable mongod
# 停止mongodb
sudo systemctl stop mongod
# 重启mongodb
sudo systemctl restart mongod

1667973107364.jpg

2.2.13 进入交互终端

MongoDB安装完成后,默认是没有权限验证的,默认是不需要输入用户名密码即可登录的。
也可以启动权限认证,但是必须注意:
mongodb默认是没有管理员账号的,所以要先切换到 admin 数据库添加管理员账号,再开启权限认证,否则就无法登录了。
进入交互终端 mongo
1667973127427.jpg
退出 exit

MongoDB shell version v4.4.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("2c920d56-ddbb-4649-9191-a3bd4506a2d2") }
MongoDB server version: 4.4.2
---
The server generated these startup warnings when booting:
    # 警告:强烈建议使用XFS文件系统,并使用WiredIger存储引擎。
    # 解释:因为当前ubuntu使用的是ext4文件系统,mongodb官方建议使用XFS文件系统功能更能发挥mongodb的性能,忽略不管
        2020-11-23T16:23:34.416+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
        # 警告:当前mongodb没有为数据库启用访问控制。对数据和配置的读写访问是不受限制的。
        # 解释:后面会创建数据库用户采用密码登陆的。暂时不用管
        2020-11-23T16:23:35.046+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).
        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.
        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

mongod是处理MongoDB系统的主要进程。主要负责处理数据请求,管理数据存储,和执行后台管理操作。
当我们运行mongod命令意味着正在启动MongoDB进程,并且在后台运行。
mongo是一个命令行工具,用于连接一个特定的mongod实例。当我们没有带参数运行mongo命令它将使用默认的端口号27017和localhost进行连接。

文档参考:
https://www.shuzhiduo.com/A/nAJvZwyxJr/

3. 基础使用

首先了解下mongo角色权限

role作用
read允许用户读取指定数据库
readWrite允许用户读写指定数据库
dbAdmin允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root只在admin数据库中可用。超级账号,超级权限

其次在看下mongoDB的数据类型

# MongoDB数据类型
String : 这是最常用的数据类型来存储数据。在MongoDB中的字符串必须是有效的UTF-8。
Integer : 这种类型是用来存储一个数值。整数可以是32位或64位,这取决于您的服务器。
Boolean : 此类型用于存储一个布尔值 (true/ false) 。
Double : 这种类型是用来存储浮点值。
Min/ Max keys : 这种类型被用来对BSON元素的最低和最高值比较。
Arrays : 使用此类型的数组或列表或多个值存储到一个键。
Timestamp : 时间戳。这可以方便记录时的文件已被修改或添加。
Object : 此数据类型用于嵌入式的文件。
Null : 这种类型是用来存储一个Null值。
Symbol : 此数据类型用于字符串相同,但它通常是保留给特定符号类型的语言使用。
Date : 此数据类型用于存储当前日期或时间的UNIX时间格式。可以指定自己的日期和时间,日期和年,月,日到创建对象。
Object ID : 此数据类型用于存储文档的ID。
Binary data : 此数据类型用于存储二进制数据。
Code : 此数据类型用于存储到文档中的JavaScript代码。
Regular expression : 此数据类型用于存储

以下演示基于docker-compose部署的mongodb
进入到容器内:docker exec -it mongo /bin/bash
进入交互终端:mongo
1.jpg

3.1 MongoDB连接

标准的URI连接

mongodb://[username:password@]host1[:port1][,host2[:port2],...,[,hostN[:hostN]][/[database[?options]]

# mongodb:// --固定格式,必须指定。
# username:password@ --可选项,如果设置,在连接数据库服务器后,驱动都会尝试登录这个数据库。
# host1 --必须的指定至少一个host,host1是这个URI必须填写的。它指定了要连接服务器的地址。如果要连接复制集,可以指定多个主机地址。
# port --可选指定端口,如果不填,默认27017。
# /database --如果指定username:password@,连接并验证登录指定数据库。不指定则默认打开test数据库。
# ?options  --连接选项。如果不使用/database,则前面需加上/。所有连接选项都是键值对name=value,键值对间通过 & 或 ; 分隔,标准的连接格式包含多个选项(options)。

示例

# 使用用户名admin和密码123456连接到默认数据库
mongodb://admin:123456@localhost/

# 连接本地数据库服务器,端口使用默认
mongodb://localhost

# 使用用户名admin和密码123456登录到localhost的baz数据库
mongodb://admin:123456@localhost/baz

# 连接replica pair,服务器1为example1.com,服务器为example2.com
mongodb://exxample1.com:27017,example2.com:27017

# 连接replica set三台服务器(端口27017,27018,27019)
mongodb://localhost, localhost:27018, localhost:27019

3.2 用户管理(命令行)

3.2.1 创建 mongo 用户并登录

mongo默认是没有用户的,所以需要先创建用户。
进入切换数据库到admin中use admin
登录 db.auth("root","root")
认证成功返回 1

db.createUser({user:'admin',pwd:'123456',roles:[{role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]})

db.createUser   #创建用户命令
user            #用户名
pwd             #密码
roles           #角色

#注意:帐号是跟着数据库绑定的,所以是什么数据库的用户,就必须在指定库里授权和验证!!!

2.jpg
登录刚刚创建的用户db.auth('admin', '123456')
image.png

3.2.2 查看系统中所有的用户

需要切换到admin中使用数据库管理员的权限进行操作
db.system.users.find()
image.png

3.2.3 删除用户

db.system.users.remove(json条件)
根据user用户名删除用户 db.system.users.remove({user:"test"})

3.2.4 修改密码

必须切换到对应的库下

db.changeUserPassword(“账户名”, “新密码”)
use test
db.changeUserPassword("test", "123456")

3.3 库管理

3.2.1 显示所有数据库列表

空数据库不会显示,或者说空数据库已经被删除了。

db            #查看当前数据库
db.getName()  #查看当前数据库

show dbs      #查看所有数据库

3.2.2 切换数据库

如果数据库不存在则创建数据库。
use <database>

3.2.3 删除当前数据库

如果数据库不存在,也会返回 "ok":1
db.dropDatabase()

3.2.4 查看当前数据库状态

db.stats()
image.png

3.4 数据库操作

3.4.1 创建数据库

语法use DATABASE_NAME
如果数据库不存在则创建,有的话需要切换到指定数据库。

use cache  #创建数据库cache

show dbs   #查看所有数据库

由于cache数据库没有数据,所以执行show dbs命令时不显示。要显示需要插入一些数据。

3.4.2 创建集合

在mongodb中其实不创建集合,直接添加文档,mongodb也会自动生成集合的。
语法:db.createCollection(name, options)
name --集合名 options --可选参数,指定有关内存大小及索引的选项。

字段类型描述
capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。
autoIndexId布尔3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size数值(可选)为固定集合指定一个最大值,即字节数。
如果 capped 为 true,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。(单位:字节数)

在插入文档时,mongodb会先检查size,再检查max。

# name为必填参数,options为可选参数。capped若设置值为true,则size必须也一并设置。
> use cache
switched to db school
> db.createCollection("student")   # 创建student集合
{ "ok" : 1 }

show collections 或 show tables   # 查看当前数据库已有的集合

# 创建固定集合mycol,集合空间大小为6142800B,文档最大个数为10000个
db.createCollection("mycol", {capped:true, autoIndexId:true, size:6142800, max:10000})

# 添加文档到不存在的集合中,mongodb会自动创建集合
> db.mycol1.insert({"name":"小明"})
>show collections
mycol1

3.4.3 插入文档

文档数据结构与JSON基本一样,所有存储在集合中的数据都是BSON格式(一种二进制的存储格式)。
语法db.COLLECTION_NAME.insert(document)
若插入的数据主键已经存在,则会抛出主键冲突异常,插入失败。

db.collection.insert(
   <document or array of documents>,   # document --要写入的文档,insert可以同时插入多条数据
   {
     writeConcern: <document>,   # 设定写操作的响应等级
     ordered: <boolean>
   }
)

db.spit.insert({_id:"1",content:"我还是没有想明白到底为啥出错",userid:"1012",nickname:"小明",visits:NumberInt(2020)});
db.spit.insert({_id:"2",content:"加班到半夜",userid:"1013",nickname:"凯撒",visits:NumberInt(1023)});
db.spit.insert({_id:"3",content:"手机流量超了咋办?",userid:"1013",nickname:"凯撒",visits:NumberInt(111)});
db.spit.insert({_id:"4",content:"坚持就是胜利",userid:"1014",nickname:"诺诺",visits:NumberInt(1223)});

使用 db.collection.insertOne() 插入新文档

db.collection.insertOne(
    <document>,   # document --要写入的文档
    {
        writeConcern: <document>   # writeConcern --写入策略,默认为1,即要求确认写操作,0是不要求
    }
) 

使用 db.collection.insertMany() 插入文档

db.collection.insertMany(
    [<document 1>, <document 2>, ...]   # document --要写入的文档
    {
        writeConcern: <document>,   # writeConcern --写入策略,默认为1,即要求确认写操作,0是不要求
        ordered: <boolean>   # ordered  --指定是否按顺序写入,默认为true,按顺序写入
    }
)

示例

# 在数据库school的student集合中插入文档
# 1.先将文档数据定位一个变量document
document=({
    name : '小明',
    sex : 'm',
    age : 18,
    weight : 100,
    subject : ['math', 'English', 'physical']
});

# 2.执行插入操作
db.student.insert(document)
# 一次插入多条文档数据
document_list = [{"a" : 1}, {"b" : 2}]
db.collection1.insertMany(document_list)

3.4.4 更新文档

update()方法
语法

db.collection.update(
    <query>,   # update的查询条件,类似sql update中的where后的语句条件
    <update>,
    {
        upsert: <boolean>   # 可选,若为true,即不存在 update 的对象记录时则插入。默认时false,不插入
        multi: <boolean>   # 可选,默认是false,只更新找到的第一条记录。如果为true,就把匹配到的记录全部更新
        writeConcern: <document>   # 可选,抛出异常的级别
    }
)

示例

# 更新student集合中文档的name
db.student.update({'name':'小明'}, {$set: {'name':'小王'}})
# 修改多条
db.student.update({'name':'小明'}, {$set: {'name':'小王'}}, {multi: true})

save()方法
语法

# 通过传入文档来替换已有的文档,_id存在就更新,不存在就插入。
db.collection.save(
   <document>,   # document --文档数据
   {
     writeConcern: <document>   # writeConcern --可选,抛出异常的级别
   }
)

3.4.5 查询文档

find()方法
语法

db.collection.find(query, projection)
# query --可选,使用查询操作符指定查询条件
# projection --可选,使用投影操作符指定返回的键。查询时返回文档中所有的键值,值需要省略该参数即可

易读方式查询数据,使用pretty()方法,格式化显示所有文档:
db.collection.find().pretty()

# 查询全部数据
db.spit.find();
# 根据id进行查询
db.spit.find("_id":"1");
# 有2条数据,只想查询一条数据出来
db.spit.findOne();
# 使用limit方法,来指定返回的记录条数, 该方法的调用在find方法之后
db.spit.find({"userid":"1013"}).limit(1)

3.4.6 导入数据

mongo import -d dbname -c collectionname --file filename --headerline --type json/csv -f field
-d:后面跟的是 mongodb数据库名称。
-c:后面跟的是 这个数据库里面的某一个集合,因为导入数据会覆盖原来数据,所以集合里面需要是空的。
-file:后面跟的是导入数据的文件路径,必须要写绝对路径才可以。
-type:导入的文件类型。
-f:csv格式。

3.4.7 删除文档、集合、数据库

删除文档

使用remove()方法来删除文档
语法

db.collection.remove(
    <query>,   # query --可选,删除文档的查询条件
    {
        justOne: <boolean>,   # justOne --可选,如果为true或1,则值删除一个文档,不设置的话默认false,则删除所有匹配的文档
        writeConcern: <document>   # writeConcern --可选,抛出异常的级别
    }
)

示例

db.student.remove({'name' : '小明'})

#删除所有数据(相当于SQL中的truncate命令)
db.student.remove({})

# 删除id为2的数据
db.spit.remove({"_id" : "2"})

deleteOne() 和 deleteMany()

# 删除集合全部文档
db.student.deleteMany({})

# 删除name为小明的全部文档
db.student.deleteMany({'name' : '小明'})

# 删除一个name为小明的文档
db.student.deleteOne({'name' : '小明'})

删除集合

语法db.collection.drop()
**返回值:**删除成功则返回true,否则false

# 先用show collections 命令查看已有集合,接着删除集合mycol1
> show collections
mycol
mycol1
system.indexes
student
> db.mycol1.drop()
true

删除数据库

语法:db.dropDatabase()
删除当前数据库,默认为test,可以使用db命令查看当前数据名。

# 首先查看数据库
show dbs
# 切换到数据库school
use school
# 执行删除命令
db.dropDatabase()
# 最后查看数据库是否被删除
show dbs

3.4.7 排序

sort()方法用来排序,使用1作为升序,-1作为降序条件。
语法

db.collection.find().sort({KEY:1})   # KEY:键,用来排序的字段

文档参考:
https://www.cnblogs.com/mao2080/p/9570909.html
https://www.cnblogs.com/dylan123/articles/11111154.html
https://www.cnblogs.com/sharpest/p/7830805.html
https://blog.csdn.net/qq_37718585/article/details/123533361

4. FAQ

docker-compose部署报错

执行启动后容器一直处于restarting 状态
日志报错信息 WARNING: MongoDB 5.0+ requires a CPU with AVX support, and your current system does not appear to have that!

原因:经查询得知,如果是英特尔的CPU,只要是二代或以后的i3、i5或者i7这几种,就会支持AVX指令集,奔腾及赛扬暂不支持。
解决:部署时采用4.4版本即可。
参考文档:
https://blog.csdn.net/weixin_44443884/article/details/126058556

软件包部署报错

部署参考
https://blog.csdn.net/janyxe/article/details/125346386

bin/mongod --port=27017 --dbpath=/opt/mongodb/mongodb/data --logpath=/opt/mongodb/mongodb/log/mongodb.log --bind_ip=0.0.0.0 --fork执行报错

bin/mongod: error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory

查找需要的依赖包:ldd /opt/mongodb/mongodb/bin/mongod
lQLPJxbbTMvMjSDNAhDNA3Ww7CcPrR9kGDoDaF4OAwD0AA_885_528.png
原因:缺失相关依赖文件
为了找到缺失的文件 --> 下载安装openssl --> 安装后再次尝试发现还是没有 --> 但是lib64里有而lib中没有,而且名字不同,一个是 libssl.so.1.1,一个是 libssl.so.10 --> 所以直接将openssl里的 libssl.so.1.1软连接到 libssl.so.10,这样就可以找到了。
解决

  1. 先安装openssl
  2. 软链接过去ln -s /usr/local/lib/libssl.so.1.1 libssl.so.10或直接复制过去

cp libcrypto.so.1.0.2o /usr/lib/libcrypto.so.10
1668049897644.png
image.png

openssl 下载地址:
https://www.openssl.org/source/old/
更新 openssl 参考:
https://www.baidu.com/link?url=VpqTqVDamPy3J3DRaVdZlzOIFq5rpTaPv70avRYIKyP0ZmSt4ozFq_NiEoCggoh_3XCeevty5TqWldnc-7ommEdnYx-t_wMR7NlAparrq7C&wd=&eqid=e577d7cd0000135d00000003636b670e

mv /usr/bin/openssl /usr/bin/openssl.old 
cd /usr/local/src/

wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz

# 如果提示“To connect to www.openssl.org insecurely, use `--no-check-certificate'.”
# 连接到www.openssl.org不安全,使用“不检查证书”,加入no-check-certificate 即可成功安装

wget --no-check-certificate 'https://www.openssl.org/source/openssl-1.1.1h.tar.gz'

tar zxvf openssl-1.1.1h.tar.gz
cd ./openssl-1.1.1h/
./config

# 安装已经编译好的程序。复制文件树中到文件到指定的位置
make install


ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1  
ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1  

ldconfig

更新 openssl 并将所需文件复制到目录后,发现又报了新的错误:

bin/mongod: /lib/libssl.so.10: version `libssl.so.10' not found (required by bin/mongod)

OpenSSL 1.1.1o  3 May 2022   #openssl版本

可能是由于 openssl 版本的原因造成,在此记录下来,以后有机会在深入研究尝试寻找解决办法。

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值