1,TokuMX
Percona TokuMX是一个高度可扩展的零维护停机时间数据库,支持MongoDB v2.4协议和驱动程序,该协议将所有MongoDB存储替换为分形树索引。Percona TokuMX不需要对MongoDB应用程序或代码进行任何更改。Percona TokuMX的主要优点是:
但是目前该版本逐渐的停止维护,mongodb最新版本的特性导致无法使用,因此需要将TokuMX数据迁移至最新的mondb4.2.8
2,版本升级问题
要注意的是,TokuMX的数据存储格式与MongoDB完全不一样,需要使用mongodump导出数据,然后用mongorestore导入才可以使用,需要逐步的升级版本:
1,2.4版本升级至2.6版本
1.1 安装mongodb2.4版本
linux各版本下载地址:
https://www.mongodb.org/dl/linux/x86_64
1,对2.4版本进行解压
tar zxvf mongodb-linux-x86_64-2.4.10.tgz
2,创建数据库存储目录:/opt/mongo2.4/db
3,创建日志存储目录:/opt/mongo2.4/log/mongo24.log
4,后台启动mongodb服务:
# ./bin/mongod --dbpath /opt/mongo2.4/db --logpath /opt/mongo2.4/log/mongo24.log --logappend --fork
5,登入创建root用户: 如果mongo服务需要启用用户验证那么在升级到2.6版本之前要确保admin库里至少有一个权限为userAdminAnyDatabase的用户存在
./bin/mongo
use admin
db.addUser({user: "root", pwd: "root", roles: ["userAdminAnyDatabase"]})
1.2导出TokuMX2.4的数据
mkdir /opt/databack
mongodump --host 127.0.0.1 --port 27018 -o /opt/databack
1.3将该数据导入mongodb2.4
./bin/mongorestore --directoryperdb /opt/databack/ -u root -p root --authenticationDatabase admin
1.4 查看mongodb2.4的数据
# ./bin/mongo
> use admin
> db.auth('root','root')
> show dbs
备份该数据:
mkdir /opt/mongo2.4/dback
./bin/mongodump -o /opt/mongo2.4/dback -u root -p root
2,下载安装2.6版本
2.1 对版本进行升级
1,下载地址
https://www.mongodb.org/dl/linux/x86_64
2,对压缩包进行解压
tar xf mongodb-linux-x86_64-2.6.4.gz
3,确认备份过数据后,停掉2.4的版本
kill `ps -ef|grep mongo|awk {'print $2'}`
4,用2.6的bin文件,使用老版本的数据和日志目录启动
./bin/mongod --dbpath /opt/mongo2.4/db --logpath /opt/mongo2.4/log/mongo24.log --logappend --fork --upgrade
5,再次启动,去掉--upgrade
./bin/mongod --dbpath /opt/mongo2.4/db --logpath /opt/mongo2.4/log/mongo24.log --logappend --fork
2.2 查看升级后的数据
# ./bin/mongo
##因为2.6中加入了很多的限制,所以,在2.4迁移到2.6的过程中,需要验证一下:
/opt/mongo2.6# ./bin/mongo
use admin
db.auth('root','root')
> db.upgradeCheckAllDBs()
##使用admin数据库中的authSchemaUpgrade命令更新用户权限数据。
> db.adminCommand({authSchemaUpgrade: 1 });
> use admin
switched to db admin
> db.auth('root','root')
1
> show dbs
2.3 升级mongodb的用户数据格式2.6升级到3.0前需要验证现有的用户schema, 在3.0中MongoDB完全弃用了之前的用户授权验证模式,所以在升级3.0前需要把2.6的用户schema升级到兼容3.0的格式。
use admin
db.system.version.find( { _id: "authSchema" })
输出:
{ "_id" : "authSchema", "currentVersion" : 3 }
2.4 如果返回的值小于3或者没有输出,那么则需要用在admin库里具有userAdminAnyDatabase权限的用户连上mongo的admin库然后执行用户认证格式转换。
db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 });
2.5 导出所有的数据到2.6版本目录下
mkdir /opt/mongo2.6/dback/
/opt/mongo2.6/bin/mongodump -u root -p root -o /opt/mongo2.6/dback/
3,将mongo2.6版本升级到3.0版本
3.1 在3.0目录下新建数据和日志目录
mkdir /opt/mongo3.0/dback
mkdir /opt/mongo3.0/db
mkdir /opt/mongo3.0/log
touch mkdir /opt/mongo3.0/log/mongo30.log
3.2 直接启动:
kill `ps -ef|grep mongo|awk {'print $2'}`
./bin/mongod --dbpath /opt/mongo3.0/db --logpath /opt/mongo3.0/log/mongo30.log --logappend --fork
导入2.6备份的数据:
/opt/mongo3.0# ./bin/mongorestore /opt/mongo2.6/dback/
查看数据:
show dbs
导出数据:
./bin/mongodump -o /opt/mongo3.0/dback/
4 3.0版本升级至3.2版本
4.1 直接启动3.2版本
kill `ps -ef|grep mongo|awk {'print $2'}`
./bin/mongod --dbpath /opt/mongo3.2/db --logpath /opt/mongo3.2/log/mongo32.log --logappend --fork
导入3.0数据:
./bin/mongorestore /opt/mongo3.0/dback/
5,下载3.4版本并升级
5.1 使用3.4的mongo bin和3.2的conf目录启动
kill `ps -ef|grep mongo|awk {'print $2'}`
./bin/mongod --dbpath /opt/mongo3.2/db --logpath /opt/mongo3.2/log/mongo32.log --logappend --fork
5.1 使用mongo shell登录mongodb控制台,执行修改兼容性版本命令:
./bin/mongo
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
5.2 添加root用户
use admin;
db.createUser(
{
user: "root",
pwd: "root",
roles: [ { role: "root", db: "admin" } ]
}
)
再使用的root角色用户登录,执行修改兼容性版本为3.4命令::
db.auth('root','root')
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
查看当前兼容性版本:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
输出如下:
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
{ "ok" : 1 }
> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : "3.4", "ok" : 1 }
6, 升级至版本3.6
6.1下载3.6版本,步骤同上。
kill `ps -ef|grep mongo|awk {'print $2'}`
./bin/mongod --dbpath /opt/mongo3.2/db --logpath /opt/mongo3.2/log/mongo32.log --logappend --fork
./bin/mongo
> use admin
> db.auth('root','root')
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
{ "ok" : 1 }
6.2查看当前兼容性版本
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 }
兼容性版本更改成功
7,升级至4.0
7.1 方法同上
kill `ps -ef|grep mongo|awk {'print $2'}`
./bin/mongod --dbpath /opt/mongo3.2/db --logpath /opt/mongo3.2/log/mongo32.log --logappend --fork
7.2 关闭3.6的mongod进程,启动4.0的mongod
7.3 执行修改兼容性版本命令:
> use admin
> db.auth('root','root')
db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )
返回:
{ "ok" : 1 }
7.4 查看当前兼容性版本:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
返回
{ "featureCompatibilityVersion" : { "version" : "4.0" }, "ok" : 1 }
8,从4.0.x版本升级至4.2.x版本(操作同上)
注:从4.2.x版本开始,mongodb将不再支持MMPv1引擎,相关配置项将失效
8.1 关闭4.0.x版本的mongod进程,启动4.2.x的mongod
kill `ps -ef|grep mongo|awk {'print $2'}`
./bin/mongod --dbpath /opt/mongo3.2/db --logpath /opt/mongo3.2/log/mongo32.log --bind_ip_all --logappend --fork
8.2 执行修改兼容性版本命令:
./bin/mongo
db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )
返回:
{ "ok" : 1 }
查看当前兼容性版本:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
返回:
{ "featureCompatibilityVersion" : { "version" : "4.2" }, "ok" : 1 }
至此版本升级完毕!
9,重新启动4.2.8
9.1 导出4.2.8的数据
mkdir /opt/mongo4.2.8/dback
./bin/mongodump -o /opt/mongo4.2.8/dback/
9.2 重新启动
mkdir /opt/mongo4.2.8/db
mkdir /opt/mongo4.2.8/log/mongo42.log
./bin/mongod --dbpath /opt/mongo4.2.8/db --logpath /opt/mongo4.2.8/log/mongo42.log --bind_ip_all --logappend --fork
9.3 导入上面导出的数据
./bin/mongorestore /opt/mongo4.2.8/dback/
导入完成后,通过登入检查数据完整性!
10,分片集群搭建参考以下文章