網(wǎng)站改版原則惠城網(wǎng)站設(shè)計(jì)
MongoDB從4.0.23至5.0.19升級(jí)經(jīng)歷
引子:為了解決MongoDB的兩個(gè)漏洞決定把MongoDB升級(jí)至最新版本,期間也踩了不少坑,在這里分享出來供大家學(xué)習(xí)與避坑~
1、MongoDB的兩個(gè)漏洞
漏洞1:MongoDB Server 安全漏洞(CVE-2021-20330)
漏洞2:MongoDB Server 安全漏洞(CVE-2021-32036)
我們生產(chǎn)環(huán)境使用的是4.0.23
版本,正好是漏洞版本~官方雖然已經(jīng)發(fā)布了補(bǔ)丁鏈接,但是還是看不懂里面的內(nèi)容,不知道怎么修復(fù)。并且從ChatGPT
得知升級(jí)版本是最好的解決辦法。于是決定把MongoDB升級(jí)到最新版本。
2、MongoDB數(shù)據(jù)備份
數(shù)據(jù)的備份與還原是必須的,版本升級(jí)后需要把歷史數(shù)據(jù)還原到新版本中。然而我們只是把MongoDB作為文件存儲(chǔ)服務(wù),并沒有存儲(chǔ)核心的業(yè)務(wù)數(shù)據(jù),只涉及到一個(gè)數(shù)據(jù)庫和3個(gè)集合,因此備份與還原用mongoexport
和mongoimport
命令就好了,例如
cd bin
# 備份集合 fileList 的數(shù)據(jù)(存儲(chǔ)自定義的文件元信息)
./mongoexport --host 21.48.141.63:27017 -u file -p ah@123$ -d file -c fileList -o ../back/fileList.json# 備份集合 fs.files 的數(shù)據(jù)(GridFS存儲(chǔ)的meta數(shù)據(jù))
./mongoexport --host 21.48.141.63:27017 -u file -p ah@123$ -d file -c fs.files -o ../back/fs.files.json# 備份集合 fs.chunks 的數(shù)據(jù)(GridFS存儲(chǔ)的二進(jìn)制數(shù)據(jù))
./mongoexport --host 21.48.141.63:27017 -u file -p ah@123$ -d file -c fs.chunks -o ../back/fs.chunks.json# 命令參數(shù)說明
# -h 或者是 --host 指定MongoDB服務(wù)的ip和端口
# -u 指定認(rèn)證的用戶名
# -p 指定認(rèn)證的密碼
# -d 指定數(shù)據(jù)庫
# -c 指定集合
# -o 指定導(dǎo)出的文件名和路徑
備份好后,可以移動(dòng)到指定的目錄。然后直接把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、上傳到服務(wù)器后解壓,解壓命令如下
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版本修改了配置文件書寫格式,各項(xiàng)可配置項(xiàng)如下
# 日志輸出文件路徑
systemLog:destination: filelogAppend: truepath: /opt/app/mongodb/logs/mongodb.log# 數(shù)據(jù)庫路徑
storage:dbPath: /opt/app/mongodb/datajournal:enabled: true# how the process runs
processManagement:fork: true # 開啟守護(hù)進(jìn)程pidFilePath: /opt/app/mongodb/data/mongod.pid # location of pidfiletimeZoneInfo: /usr/share/zoneinfo# network interfaces
net:port: 27017 #端口號(hào)bindIp: 0.0.0.0# 開啟認(rèn)證 必選先添加用戶
#security:#authorization: enabled
暫時(shí)先關(guān)閉認(rèn)證功能,新增完用戶再開啟~
4、啟動(dòng)MongoDB服務(wù)
cd mongodb
bin/mongod -f ./mongodb.conf
啟動(dòng)過程中如果遇到如下錯(cuò)誤,則需要安裝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/
找到高亮的下載文件(如下圖所示),然后下載
下載完后上傳到服務(wù)器的任意目錄
su root
rpm -i compat-openssl10-1.0.2o-3.el8.x86_64.rpm
重新啟動(dòng)MongoDB服務(wù)
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
# 出現(xiàn)以上提示信息代表啟動(dòng)成功了
6、驗(yàn)證是否啟動(dòng)成功
ps -ef|grep mongodb
# 得的 mongodb 進(jìn)程信息
# 關(guān)閉MongoDB服務(wù)時(shí)可直接殺死進(jìn)程
7、創(chuàng)建數(shù)據(jù)庫與用戶
這一步也是必須的,后面我們都會(huì)用這個(gè)用戶訪問MongoDB服務(wù)
cd mongodb
cd bin
./mongo# 創(chuàng)建 file 數(shù)據(jù)庫
use file
# 為 file 數(shù)據(jù)庫創(chuàng)建 root 用戶
db.createUser({user: "root", pwd: "root", roles: ["readWrite", "dbAdmin"]})
# 為 file 數(shù)據(jù)庫創(chuàng)建 file 用戶
db.createUser({user: "file", pwd: "ah@123", roles: ["readWrite", "dbAdmin"]})
8、開啟MongoDB的認(rèn)證功能
新建完用戶后,我們就可以關(guān)閉MongoDB服務(wù),修改配置文件開啟MongoDB的認(rèn)證功能。
vi mongodb.conf# 日志輸出文件路徑
systemLog:destination: filelogAppend: truepath: /opt/app/mongodb/logs/mongodb.log# 數(shù)據(jù)庫路徑
storage:dbPath: /opt/app/mongodb/datajournal:enabled: true# how the process runs
processManagement:fork: true # 開啟守護(hù)進(jìn)程pidFilePath: /opt/app/mongodb/data/mongod.pid # location of pidfiletimeZoneInfo: /usr/share/zoneinfo# network interfaces
net:port: 27017 #端口號(hào)bindIp: 0.0.0.0# 開啟認(rèn)證,必選先添加用戶
security:authorization: enabled
重新啟動(dòng)MongoDB服務(wù)。
至此所有的安裝與配置都完成了,就可以使用客戶端工具進(jìn)行訪問了~
4、MongoDB數(shù)據(jù)還原
查看所有MongoDB命令
[app@app mongodb]$ cd bin
[app@app bin]$ ls
install_compass mongo mongod mongos
我們發(fā)現(xiàn)5.0版本只有基礎(chǔ)的幾個(gè)工具,新版mongodb中不再包含導(dǎo)入導(dǎo)出工具,需要單獨(dú)下載安裝。
下載地址https://www.mongodb.com/try/download/database-tools
上傳到MongoDB的根目錄下,進(jìn)行解壓,解壓命令如下
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 目錄下
還原數(shù)據(jù)
cd mongoddb
cd tools/bin# 還原集合 fileList 數(shù)據(jù)
./mongoimport --host 21.48.141.63:27017 -u file -p ah@123 -d file -c fileList --file /opt/app/back/fileList.json# 還原集合 fs.files 數(shù)據(jù)
./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 數(shù)據(jù)
./mongoimport --host 21.48.141.63:27017 -u file -p ah@123 -d file -c fs.chunks --file /opt/app/back/fs.chunks.json# 命令參數(shù)說明
# --host 指定MongoDB服務(wù)的ip和端口
# -u 指定認(rèn)證的用戶
# -p 指定認(rèn)證的用戶密碼
# --file 指定需要導(dǎo)入的文件
ok大功告成~