最近为了长远考虑想把项目MongoDB
里存放的400
多万数据迁移到云服务厂商提供的MongoDB
服务上,省去自己去维护的时间,但是看了下云服务对MongoDB
数据迁移上云的要求是自建MongoDB
数据库的最低版本为3.0
。 公司服务器上的MongoDB是当时用yum
安装的,版本还是2.4
。于是就有了这次MongoDB的版本升级任务。好了闲话少说直接进入正题部分。
首先阐明,本文描述的升级只针对单点部署或者是master-slave
部署的MongDB的版本升级,不过文中引用的官方文档中有关于复制集或者分片MongoDB的版本升级指南,可以查阅后按照步骤操作。
2.4版本升级到3.0的话由于数据兼容性的问题,需要先升级到2.6版本,再升级至3.0
升级前先来说个老生常谈的原则:版本升级一定要在测试环境成功测试后再在production机器上进行版本升级。
步骤:
一、2.4升级到2.6
1、下载2.6版本的MongoDB程序包并解压
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、用2.6版本的mongo shell 连接2.4版本的mongos 然后运行升级检查
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.6升级到3.0
1、下载3.0的程序包
curl https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.9.tgz -o ./mongodb-3.0
2、升级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 });
3、停掉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下载