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個集合,因此備份與還原用mongoexport
和mongoimport
命令就好了,例如
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大功告成~