MongoDB升级经历(4.0.23至5.0.19)

MongoDB从4.0.23至5.0.19升级经历

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

1、MongoDB的两个漏洞

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

MongoDB升级经历(4.0.23至5.0.19)_第1张图片

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

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

MongoDB升级经历(4.0.23至5.0.19)_第3张图片

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: file
  logAppend: true
  path: /opt/app/mongodb/logs/mongodb.log
 
# 数据库路径
storage:
  dbPath: /opt/app/mongodb/data
  journal:
    enabled: true
 
# how the process runs
processManagement:
  fork: true  # 开启守护进程
  pidFilePath: /opt/app/mongodb/data/mongod.pid  # location of pidfile
  timeZoneInfo: /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/

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

MongoDB升级经历(4.0.23至5.0.19)_第4张图片

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

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: file
  logAppend: true
  path: /opt/app/mongodb/logs/mongodb.log
 
# 数据库路径
storage:
  dbPath: /opt/app/mongodb/data
  journal:
    enabled: true
 
# how the process runs
processManagement:
  fork: true  # 开启守护进程
  pidFilePath: /opt/app/mongodb/data/mongod.pid  # location of pidfile
  timeZoneInfo: /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

你可能感兴趣的:(MongoDB,mongodb,数据库)