MongoDB升级经历(4.0.23至5.0.19)

MongoDB从4.0.23至5.0.19升级经历

引子:为了解决MongoDB的两个漏洞决定把MongoDB升级至最新版本,期间也踩了不少坑,在这里分享出来供大家学习与避坑~

1、MongoDB的两个漏洞

漏洞1:MongoDB Server 安全漏洞(CVE-2021-20330)

在这里插入图片描述

漏洞2:MongoDB Server 安全漏洞(CVE-2021-32036)

在这里插入图片描述
我们生产环境使用的是4.0.23版本,正好是漏洞版本~官方虽然已经发布了补丁链接,但是还是看不懂里面的内容,不知道怎么修复。并且从ChatGPT得知升级版本是最好的解决办法。于是决定把MongoDB升级到最新版本。

在这里插入图片描述

2、MongoDB数据备份

数据的备份与还原是必须的,版本升级后需要把历史数据还原到新版本中。然而我们只是把MongoDB作为文件存储服务,并没有存储核心的业务数据,只涉及到一个数据库和3个集合,因此备份与还原用mongoexportmongoimport命令就好了,例如

cd bin
# 备份集合 fileList 的数据(存储自定义的文件元信息)
./mongoexport --host 21.48.141.63:27017 -u file -p ah@123$ -d file -c fileList -o ../back/fileList.json# 备份集合 fs.files 的数据(GridFS存储的meta数据)
./mongoexport --host 21.48.141.63:27017 -u file -p ah@123$ -d file -c fs.files -o ../back/fs.files.json# 备份集合 fs.chunks 的数据(GridFS存储的二进制数据)
./mongoexport --host 21.48.141.63:27017 -u file -p ah@123$ -d file -c fs.chunks -o ../back/fs.chunks.json# 命令参数说明
# -h 或者是 --host 指定MongoDB服务的ip和端口
# -u 指定认证的用户名
# -p 指定认证的密码
# -d 指定数据库
# -c 指定集合
# -o 指定导出的文件名和路径

备份好后,可以移动到指定的目录。然后直接把4.0.23版本全部删掉。

mv back/ ../
rm -rf mongodb

3、MongoDB-5.0.19下载与安装

直接从官方文档下载合适的版本即可,不一定是5.0.19版本的~

# 例如下载地址
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.19.tgz

1、上传到服务器后解压,解压命令如下

tar -zxvf mongodb-linux-x86_64-rhel70-5.0.19.tgz
mv mongodb-linux-x86_64-rhel70-5.0.19 mongodb

2、新建MongoDB必要的目录

cd mongodb
mkdir data
mkdir logs

3、编写MongoDB的配置文件

vi mongodb.conf

MongoDB 5.0版本修改了配置文件书写格式,各项可配置项如下

# 日志输出文件路径
systemLog:destination: filelogAppend: truepath: /opt/app/mongodb/logs/mongodb.log# 数据库路径
storage:dbPath: /opt/app/mongodb/datajournal:enabled: true# how the process runs
processManagement:fork: true  # 开启守护进程pidFilePath: /opt/app/mongodb/data/mongod.pid  # location of pidfiletimeZoneInfo: /usr/share/zoneinfo# network interfaces
net:port: 27017    #端口号bindIp: 0.0.0.0# 开启认证 必选先添加用户
#security:#authorization: enabled

暂时先关闭认证功能,新增完用户再开启~

4、启动MongoDB服务

cd mongodb
bin/mongod -f ./mongodb.conf

启动过程中如果遇到如下错误,则需要安装openssl10

error while loading shared libraries: libcrypto.so.10: cannot open shared object file ...

5、安装openssl10

下载地址:https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/AppStream/x86_64/os/Packages/

找到高亮的下载文件(如下图所示),然后下载

在这里插入图片描述

下载完后上传到服务器的任意目录

su root
rpm -i compat-openssl10-1.0.2o-3.el8.x86_64.rpm

重新启动MongoDB服务

bin/mongod -f ./mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 297058
child process started successfully, parent exiting
# 出现以上提示信息代表启动成功了

6、验证是否启动成功

ps -ef|grep mongodb
# 得的 mongodb 进程信息
# 关闭MongoDB服务时可直接杀死进程

7、创建数据库与用户

这一步也是必须的,后面我们都会用这个用户访问MongoDB服务

cd mongodb
cd bin
./mongo# 创建 file 数据库
use file
# 为 file 数据库创建 root 用户
db.createUser({user: "root", pwd: "root", roles: ["readWrite", "dbAdmin"]})
# 为 file 数据库创建 file 用户
db.createUser({user: "file", pwd: "ah@123", roles: ["readWrite", "dbAdmin"]})

8、开启MongoDB的认证功能

新建完用户后,我们就可以关闭MongoDB服务,修改配置文件开启MongoDB的认证功能。

vi mongodb.conf# 日志输出文件路径
systemLog:destination: filelogAppend: truepath: /opt/app/mongodb/logs/mongodb.log# 数据库路径
storage:dbPath: /opt/app/mongodb/datajournal:enabled: true# how the process runs
processManagement:fork: true  # 开启守护进程pidFilePath: /opt/app/mongodb/data/mongod.pid  # location of pidfiletimeZoneInfo: /usr/share/zoneinfo# network interfaces
net:port: 27017    #端口号bindIp: 0.0.0.0# 开启认证,必选先添加用户
security:authorization: enabled

重新启动MongoDB服务。

至此所有的安装与配置都完成了,就可以使用客户端工具进行访问了~

4、MongoDB数据还原

查看所有MongoDB命令

[app@app mongodb]$ cd bin
[app@app bin]$ ls
install_compass mongo mongod mongos

我们发现5.0版本只有基础的几个工具,新版mongodb中不再包含导入导出工具,需要单独下载安装。

下载地址https://www.mongodb.com/try/download/database-tools

上传到MongoDB的根目录下,进行解压,解压命令如下

tar -zxvf mongodb-database-tools-rhel70-x86_64-100.7.5.tgz
mv mongodb-database-tools-rhel70-x86_64-100.7.5 tools# 新命令在 tools/bin 目录下

还原数据

cd mongoddb
cd tools/bin# 还原集合 fileList 数据
./mongoimport --host 21.48.141.63:27017 -u file -p ah@123 -d file -c fileList --file /opt/app/back/fileList.json# 还原集合 fs.files 数据
./mongoimport --host 21.48.141.63:27017 -u file -p ah@123 -d file -c fs.files --file /opt/app/back/fs.files.json# 还原集合 fs.chunks 数据
./mongoimport --host 21.48.141.63:27017 -u file -p ah@123 -d file -c fs.chunks --file /opt/app/back/fs.chunks.json# 命令参数说明
# --host 指定MongoDB服务的ip和端口
# -u 指定认证的用户
# -p 指定认证的用户密码
# --file 指定需要导入的文件

ok大功告成~

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/43346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot + Vue 微人事(十二)

职位批量删除实现 编写后端接口 PositionController DeleteMapping("/")public RespBean deletePositionByIds(Integer[] ids){if(positionsService.deletePositionsByIds(ids)ids.length){return RespBean.ok("删除成功");}return RespBean.err("删…

工业视觉相机镜头选型方法

一、相机选型 1、首先,根据检测需求确定选用黑白/彩色、面阵/线阵相机,接口类型一般选择GigE 2、确定检测精度要求(最小特征尺寸mm)、视野范围,一个测量精度对应几个像素数(一般取3-5) 3、计…

GPT法律领域

法律领域 LaWGPT Github: https://github.com/pengxiao-song/LaWGPT 简介:基于中文法律知识的大语言模型。 数据:基于中文裁判文书网公开法律文书数据、司法考试数据等数据集展开,利用Stanford_alpaca、self-instruct方式生成对话问答数据…

esp32c3 micropython oled实时天气信息

目录 简介 效果展示 代码 main.py ssd1306.py font.py 实现思路 简介 合宙esp32c3 micropython框架,只支持128*64 I2C oled ssd1306驱动我优化过的,与其他的不一样,为避免出错,使用我的驱动 把下面两个py文件放入单片机内…

SqlServer的with(nolock)关键字的用法介绍

举个例子 下面就来演示这个情况。 为了演示两个事务死锁的情况,我们下面的测试都需要在SQL Server Management Studio中打开两个查询窗口。保证事务不被干扰。 --1、 没有提交的事务,NOLOCK 和 READPAST处理的策略: --查询窗口一请执行如下…

【马蹄集】第二十三周——进位制专题

进位制专题 目录 MT2186 二进制?不同!MT2187 excel的烦恼MT2188 单条件和MT2189 三进制计算机1MT2190 三进制计算机2 MT2186 二进制?不同! 难度:黄金    时间限制:1秒    占用内存:128M 题目…

Kotlin的Map

在 Kotlin 中,Map 是一种键值对的集合数据结构,用于存储一组关联的键和值。Kotlin 标准库提供了 Map 接口和多种实现类,使得操作和处理键值对数据更加方便。下面详细描述 Kotlin 的 Map 的用法: 创建 Map Kotlin 提供了几种方式…

SQL力扣练习(十一)

目录 1.树节点(608) 示例 1 解法一(case when) 解法二(not in) 2.判断三角形(610) 示例 1 解法一(case when) 解法二(if) 解法三(嵌套if) 3.只出现一次的最大数字(619) 示例 1 解法一(count limit) 解法二(max) 4.有趣的电影(620) 解法一 5.换座位(626) 示例 …

同步jenkinsfile流水线(sync-job)

环境 变量:env(环境变量:sit/dev/simulation/prod/all),job(job-name/all)目录:/var/lib/jenkins/jenkinsfile environment.json: [roottest-01 jenkinsfile]# cat env…

C++ string类的模拟实现

模拟实现string类不是为了造一个更好的轮子,而是更加理解string类,从而来掌握string类的使用 string类的接口设计繁多,故而不会全部涵盖到,但是核心的会模拟实现 库中string类是封装在std的命名空间中的,所以在模拟…

webpack5和webpack4的一些区别

自动清除打包目录 webpack4 // bash npm i clean-webpack-plugin -D //webpack.config.js const {CleanWebpackPlugin} require(clean-webpack-plugin); module.exports {plugins: [new CleanWebpackPlugin()} } webpack5 module.exports {output: {clean: true} } topLevel…

使用PostgreSQL构建强大的Web应用程序:最佳实践和建议

PostgreSQL是一个功能强大的开源关系型数据库,它拥有广泛的用户群和活跃的开发社区。越来越多的Web应用选择PostgreSQL作为数据库 backend。如何充分利用PostgreSQL的特性来构建健壮、高性能的Web应用?本文将给出一些最佳实践和建议。 一、选择合适的PostgreSQL数据类型 Pos…

【Vue】Mixin 混入

Vue Mixin 混入 1.简介 混入(mixin)提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项(如data、methods、mounted等等)。当组件使用混入对象时,所有混入对象的…

Java将时间戳转化为特定时区的日期字符串

先上代码: ZonedDateTime dateTime ZonedDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()),zone ); //2019-12-01T19:01:4608:00String formattedDate dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd") ); //2019-12-…

.git内存清理方式

查看前15个大文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk {print$1})"删除文件夹(public/housimg文件夹目录) git filter-branch --tree-filter rm -rf publ…

解决使用element ui时el-input的属性type=number,仍然可以输入e的问题。

使用element ui时el-input的属性typenumber,仍然可以输入e, 其他的中文特殊字符都不可以输入,但是只有e是可以输入的,原因是e也输入作为科学计数法的时候,e是可以被判定为数字的, 但是有些场景是需要把e这种…

DICOM图像的常用一些参数解析

医学图像DICOM医学影像文件格式详解 Dicom文件基本操作 DICOM图像参数? 像素:构成图片的小色点。图像每个维度的像素个数——该维度一共有多少个均匀分布的像素点。 分辨率(单位DPI):每英寸(Inch&#xf…

鸿蒙剥离 AOSP 不兼容 Android 热门问题汇总,不吹不黑不吵

上周发了一篇 《鸿蒙终于不套壳了?纯血 HarmonyOS NEXT 即将到来》的相关资讯,没想到大家「讨(fa)论(xie)」的热情很高,莫名蹭了一波流量,虽然流量对我来说也没什么用,但…

私密数据采集:隧道爬虫IP技术的保密性能力探究

作为一名专业的爬虫程序员,今天要和大家分享一个关键的技术,它能够为私密数据采集提供保密性能力——隧道爬虫IP技术。如果你在进行敏感数据采集任务时需要保护数据的私密性,那么这项技术将是你的守护神。 在进行私密数据采集任务时&#xff…