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.pswp.cn/news/43346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43346.shtml
英文地址,請注明出處:http://en.pswp.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…