当前位置: 首页 > 工具软件 > tokumx > 使用案例 >

TokuMX2.4版本升级至mongodb4.2版本具体步骤

巫马修然
2023-12-01

一,升级说明

1,TokuMX

Percona TokuMX是一个高度可扩展的零维护停机时间数据库,支持MongoDB v2.4协议和驱动程序,该协议将所有MongoDB存储替换为分形树索引。Percona TokuMX不需要对MongoDB应用程序或代码进行任何更改。Percona TokuMX的主要优点是:

  • 改进的单线程和多线程性能
  • 压缩
  • 全ACID和MVCC事务支持
  • 无需维护或计划停机时间
  • 对查询加速的群集密钥支持
  • 更好的读取缩放和副本集的延迟减少
  • 使用聚类分片键的低影响迁移和加速范围查询
  • 快速、无读的更新
  • 热备份
  • 时间点恢复
  • 审核日志记录
  • 降低 SSD 磨损
  • 地理空间索引
  • 包括除文本搜索之外的所有MongoDB v2.4 功能

但是目前该版本逐渐的停止维护,mongodb最新版本的特性导致无法使用,因此需要将TokuMX数据迁移至最新的mondb4.2.8

2,版本升级问题

要注意的是,TokuMX的数据存储格式与MongoDB完全不一样,需要使用mongodump导出数据,然后用mongorestore导入才可以使用,需要逐步的升级版本:

  • 先安装Mongodb2.4版本,将Tomux的数据导入到Mongodb2.4中;
  • 升级mongodb2.4到mongodb2.6版本
  • 升级mongodb2.6至mongodb3.0版本
  • 升级mongodb3.0至mongodb3.2版本
  • 升级mongodb3.2版本至mongodb3.4版本
  • 升级mongdb3.4版本至mongodb3.6版本
  • 升级mongdb3.6版本至mongodb4.0版本
  • 升级mongdb4.0版本至mongodb4.2版本
  • 检查数据的完整性

二,版本升级

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版本并升级

https://blog.csdn.net/newCheng/article/details/106837228

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,分片集群搭建参考以下文章

mongodb4.2.8单机分片集群搭建

 类似资料: