從MongoDB2.4升級到3.0的詳細步驟

最近爲了長遠考慮想把項目MongoDB裏存放的400多萬數據遷移到雲服務廠商提供的MongoDB服務上,省去本身去維護的時間,可是看了下雲服務對MongoDB數據遷移上雲的要求是自建MongoDB數據庫的最低版本爲3.0。 公司服務器上的MongoDB是當時用yum安裝的,版本仍是2.4。因而就有了此次MongoDB的版本升級任務。好了閒話少說直接進入正題部分。linux

首先闡明,本文描述的升級只針對單點部署或者是master-slave部署的MongDB的版本升級,不過文中引用的官方文檔中有關於複製集或者分片MongoDB的版本升級指南,能夠查閱後按照步驟操做。mongodb

2.4版本升級到3.0的話因爲數據兼容性的問題,須要先升級到2.6版本,再升級至3.0shell

升級前先來講個老生常談的原則:版本升級必定要在測試環境成功測試後再在production機器上進行版本升級。數據庫

步驟:
1、2.4升級到2.6服務器

一、下載2.6版本的MongoDB程序包並解壓dom

curl https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.11.tgz -o ./mongodb-2.6.tgz
tar -xzvf mongodb-2.6.tgz

二、用2.6版本的mongo shell 鏈接2.4版本的mongos 而後運行升級檢查curl

mongo —-host db.yourdomain.com:27017 admin -u yourname -p your pass
use admin
db.upgradeCheckAllDBs()

若是mongo服務須要啓用用戶驗證那麼在升級到2.6版本以前要確保admin庫裏至少有一個權限爲userAdminAnyDatabase的用戶存在性能

use admin
db.addUser({user: "root", pwd: "xxxxd", roles: ["userAdminAnyDatabase"]})

3.將2.4版本mongo的二進制文件替換成剛纔下載的程序包裏的bin目錄裏的二進制文件測試

sudo service mongod stop
sudo chown -R root:root yourmongo2.6dir/bin 
//把mongodb用到的二進制文件換成2.6版本的二進制文件而後再啓動mongod 
sudo service mongod start

2、2.6升級到3.0
一、下載3.0的程序包url

curl https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.9.tgz -o ./mongodb-3.0

二、升級mongodb的用戶數據格式
2.6升級到3.0前須要驗證現有的用戶schema, 在3.0中MongoDB徹底棄用了以前的用戶受權驗證模式,因此在升級3.0前須要把2.6的用戶schema升級到兼容3.0的格式。

use admin
db.system.version.find( { _id: "authSchema" })

若是返回的值小於3,那麼則須要用在admin庫裏具備userAdminAnyDatabase權限的用戶連上mongo的admin庫而後執行用戶認證格式轉換。

db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 });

三、停掉mongod 將2.6版本mongo的二進制文件替換成下載的3.0程序包裏的bin目錄裏的二進制文件,而後從新啓動mongod。

大功告成,用mongo鏈接上數據庫進入mongo shell後就會發現命令提示出當前版本是3.0,不過升級到3.0進入mongo shell後會有WARNING提示當前服務器的THP(Transparent Huge Pages)是打開的,系統啓用這個策略會影響MongoDB的性能,在StackOverflow上發現了一個比較好的解決方案,稍後會給出連接。

好了,這就是我在本次MongoDB升級中執行的全部步驟,說簡單也不簡單,說難也不難,主要是設計的參考文檔比較多,這裏記錄下升級步驟便是但願幫助有升級須要的同仁能少走彎路也是方便本身備查。

參考文檔及軟件下載連接:

升級2.6MongoDB官方指南
升級3.0MongoDB官方指南
THP警告的解決方案
MongoDB2.6下載
MongoDB3.0下載

相關文章
相關標籤/搜索