關(guān)于mongodb版本升級(jí)問題
一、背景
目前公司的mongodb版本是3.0.6的老版本,公司希望將mongodb版本升級(jí)到3.6以上,那么無(wú)語(yǔ)了,以前沒做過(guò)數(shù)據(jù)庫(kù)升級(jí),在腦子里的第一反應(yīng)是要不要重新部署一套mongodb副本集+分片的模式,又或者是可以直接從3.0.6的版本升級(jí)到3.6版本以上。
經(jīng)過(guò)查閱資料發(fā)現(xiàn),實(shí)際mongodb版本升級(jí)是需要一步一步來(lái)的,需要先升級(jí)到3.4版本,再升級(jí)到3.6版本。
3.0 ======> 3.4 ======> 3.6
二、三個(gè)重點(diǎn)需要注意
1、一定要備份config數(shù)據(jù)庫(kù);
2、修改認(rèn)證方式;需要將最新的認(rèn)證方式SCRAM-SHA-1 改成老的認(rèn)證方式 MONGODB-CR,老用戶依然能正常登陸。
3、可通過(guò)開啟認(rèn)證的方式啟動(dòng)服務(wù),通過(guò)老版本用戶登陸授權(quán);
三、環(huán)境
當(dāng)前mongodb集群三臺(tái)機(jī)器,環(huán)境是副本集+分片模式
- mongodb1:分片主1、分片主2、分片主3、config、mongos
- mongodb2:分片副本1、分片副本2、分片副本3、config、mongos
- mongodb3:分片副本1、分片副本2、分片副本3、config、mongos
四、下載各個(gè)版本的mongodb包
[yukw@mongodb1 mongodbwork3.4]$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.4.tgz ##下載版本為3.4.4[yukw@mongodb1 mongodbwork3.4]$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.6.5.tgz ##下載版本為3.6.5
五、下面介紹如何從3.0升級(jí)到3.4
1、拷貝包到相應(yīng)目錄
[yukw@mongodb1 mongodbwork3.4]$ mkdir /data/service/mongodbwork3.4[yukw@mongodb1 mongodbwork3.4]$ cp mongodb-linux-x86_64-rhel62-3.4.4.tgz /data/service/mongodbwork3.4/
2、解壓壓縮包
[yukw@mongodb1 mongodbwork3.4]$ tar xf mongodb-linux-x86_64-rhel62-3.4.4.tgz[yukw@mongodb1 mongodbwork3.4]$ mv mongodb-linux-x86_64-rhel62-3.4.4 mongodb
3、停止mongodb服務(wù)
[yukw@mongodb1 mongodbwork3.4]$ ps -ef |grep mongo |grep -v grep | awk '{print $2}' | xargs kill -2 ? ? ?##每臺(tái)機(jī)器都執(zhí)行以3.4版本的mongodb二進(jìn)制文件依次啟動(dòng)三個(gè)分片服務(wù)
[yukw@mongodb1 mongodbwork3.4] $/data/service/mongodbwork3.4/mongodb/bin/mongod -f /etc/mongodb1.conf ? ? ##每臺(tái)機(jī)器都執(zhí)行,mongodb1.conf 為mongod1配置文件[yukw@mongodb1 mongodbwork3.4] $/data/service/mongodbwork3.4/mongodb/bin/mongod -f /etc/mongodb2.conf?? ? ##每臺(tái)機(jī)器都執(zhí)行,mongodb2.conf 為mongod2配置文件[yukw@mongodb1 mongodbwork3.4] $/data/service/mongodbwork3.4/mongodb/bin/mongod -f /etc/mongodb3.conf?? ? ##每臺(tái)機(jī)器都執(zhí)行,mongodb3.conf 為mongod3配置文件
4、在PRIMARY機(jī)器上升級(jí)版本(在副本集的主上運(yùn)行)
[yukw@mongodb1 mongodbwork3.4]$ /data/service/mongodbwork3.4/mongodb/bin/mongo -port mongodb1_protconfigdb:PRIMARY> use adminswitched to db adminshard1:PRIMARY> db.auth("user_name","password")1configdb:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } ){ "ok" : 1 }configdb:PRIMARY> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ){ "featureCompatibilityVersion" : "3.4", "ok" : 1 }###############上面primary機(jī)器已經(jīng)升級(jí)到3.4,然后再到副本集機(jī)器驗(yàn)證##############[yukw@mongodb1 mongodbwork3.4]$ /data/service/mongodbwork3.4/mongodb/bin/mongo -port mongodb2_protconfigdb:PRIMARY> use adminswitched to db adminshard1:PRIMARY> db.auth("user_name","password")1configdb:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } ){ "ok" : 1 }###############上面primary機(jī)器已經(jīng)升級(jí)到3.4,然后再到副本集機(jī)器驗(yàn)證##############[yukw@mongodb1 mongodbwork3.4]$ /data/service/mongodbwork3.4/mongodb/bin/mongo -port mongodb3_protconfigdb:PRIMARY> use adminswitched to db adminshard1:PRIMARY> db.auth("user_name","password")1configdb:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } ){ "ok" : 1 }###############上面primary機(jī)器已經(jīng)升級(jí)到3.4,然后再到副本集機(jī)器驗(yàn)證##############5、上每臺(tái)副本集機(jī)器查看分片服務(wù)版本是否更新
shard1:SECONDARY> use adminswitched to db adminshard1:SECONDARY> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ){ "featureCompatibilityVersion" : "3.4", "ok" : 1 }
6、啟動(dòng)配置服務(wù)
[yukw@mongodb1 mongodbwork3.4]$ /data/service/mongodbwork3.4/mongodb/bin/mongod -f /etc/mongo_config.conf ##三臺(tái)機(jī)器均執(zhí)行
7、config配置服務(wù)配置副本集
這里需要注意先將config數(shù)據(jù)文件備份(這一步讀者自己去備份),因?yàn)樵谂渲酶北炯瘯r(shí)可能會(huì)提示副本集目錄中存在數(shù)據(jù),無(wú)法初始化
[yukw@mongodb3 data]$ /data/service/mongodbwork3.4/mongodb/bin/mongo -port config_port> use adminswitched to db admin> configdb1={_id:'configdb',members:[{_id:0,host:'10.0.1.211:20000',priority:9},{_id:1,host:'10.0.1.209:20000',priority:5},{_id:2,host:'10.0.1.111:20000',priority:7}]} ## 配置副本集并設(shè)置權(quán)重> rs.initiate(configdb1) ##初始化配置這里解釋一下,3.0版本不需要config配置服務(wù)設(shè)置副本集就能啟動(dòng)mongos路由服務(wù),但是在3.4版本需要將config配置服務(wù)配置副本集,不然啟動(dòng)mongos服務(wù)會(huì)報(bào)錯(cuò),如下:

8、修改mongos配置文件

9、啟動(dòng)mongos路由服務(wù)
[yukw@mongodb1 data]$ /data/service/mongodbwork3.4/mongodb/bin/mongos -f /etc/mongo_mongos.conf ##每臺(tái)機(jī)器都執(zhí)行
10、修改認(rèn)證方式
[yukw@mongodb1 data]$ /data/service/mongodbwork3.4/mongodb/bin/mongo -port 30000> use adminswitched to db admin> var schema = db.system.version.findOne({"_id" : "authSchema"})> schema.currentVersion = 33> db.system.version.save(schema)WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })11、將3.4版本升級(jí)到3.6,原理同上
注意:
- 1、配置服務(wù)器需要做副本集,因?yàn)閙ongos路由配置文件里需要填寫配置服務(wù)器的副本名稱;
- 2、原有的config目錄下的數(shù)據(jù)存在,導(dǎo)致創(chuàng)建配置服務(wù)器副本集報(bào)錯(cuò);
- 3、數(shù)據(jù)庫(kù)數(shù)據(jù)丟失,需要重新恢復(fù);
- 4、分片重新做;
- 5、config和mongos服務(wù)中之前建立的用戶丟失;
- 6、索引不兼容,版本3.0.6中是 v:1,版本3.4.x中是v:2,但是恢復(fù)數(shù)據(jù)后,索引會(huì)自動(dòng)變成v:2
好了,這就是mongodb版本升級(jí)的完整過(guò)程了!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MongoDB實(shí)現(xiàn)基于關(guān)鍵詞的文章檢索功能(C#版)
這篇文章主要介紹了MongoDB實(shí)現(xiàn)基于關(guān)鍵詞的文章檢索功能(C#版)的相關(guān)資料,需要的朋友可以參考下2016-04-04
Windows系統(tǒng)下安裝MongoDB并內(nèi)網(wǎng)穿透遠(yuǎn)程連接
這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下安裝MongoDB并內(nèi)網(wǎng)穿透遠(yuǎn)程連接的相關(guān)資料,文中通過(guò)圖文將步驟介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03
詳解mongoDB主從復(fù)制搭建詳細(xì)過(guò)程
這篇文章主要介紹了詳解mongoDB主從復(fù)制搭建詳細(xì)過(guò)程的相關(guān)資料,這里對(duì)實(shí)現(xiàn)主從復(fù)制進(jìn)行了詳細(xì)的步驟介紹,需要的朋友可以參考下2017-08-08
mongodb數(shù)據(jù)庫(kù)的6個(gè)安全設(shè)置命令
這篇文章主要介紹了mongodb數(shù)據(jù)庫(kù)的6個(gè)安全設(shè)置命令,如安全模式啟動(dòng)、安全認(rèn)證、數(shù)據(jù)讀寫加鎖、解鎖等,需要的朋友可以參考下2014-05-05
MongoDB數(shù)據(jù)庫(kù)常用28條查詢語(yǔ)句總結(jié)
我們經(jīng)常使用的MySQL是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),隨著時(shí)代的進(jìn)步,互聯(lián)網(wǎng)的發(fā)展關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)不滿足于互聯(lián)網(wǎng)的需求,因此出現(xiàn)了非關(guān)系數(shù)據(jù)庫(kù),下面這篇文章主要給大家總結(jié)介紹了關(guān)于MongoDB數(shù)據(jù)庫(kù)常用28條查詢語(yǔ)句,需要的朋友可以參考下2023-05-05
MongoDB db.serverStatus()輸出內(nèi)容中文注釋
這篇文章主要介紹了MongoDB db.serverStatus()輸出內(nèi)容中文注釋,本文收集了2個(gè)版本的中文注釋來(lái)講解,需要的朋友可以參考下2014-08-08
MongoDB如何正確中斷正在創(chuàng)建的索引詳解
這篇文章主要給大家介紹了關(guān)于MongoDB如何正確中斷正在創(chuàng)建的索引的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
關(guān)于單臺(tái)MongoDB實(shí)例開啟Oplog的過(guò)程詳解
這篇文章主要給大家介紹了關(guān)于單臺(tái)MongoDB實(shí)例開啟Oplog的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
mongodb eval 執(zhí)行服務(wù)器端腳本
在MongoDB的服務(wù)器端可以通過(guò)db.eval函數(shù)來(lái)執(zhí)行javascript腳本,如我們可以定義一個(gè)javascript函數(shù),然后通過(guò)db.eval在服務(wù)器端來(lái)運(yùn)行!我們前面其實(shí)也接觸過(guò)在服務(wù)器段運(yùn)行一個(gè)預(yù)定義的javascript腳本的情況,如在$where查詢,執(zhí)行mapreduce任務(wù)等。2015-05-05

