跳到主要内容

MongoDB 3.4 升级到 4.4

提示
  • 升级时长与 MongoDB 数据库中集合数量有直接关系
    • 可通过 find /data/mingdao/script/volume/data/mongodb/ -name '*collection*' | wc -l 查看集合数量
    • 例如:集合数在1万个以内需1分钟,10万约10分钟,30万约30分钟,另外也会受服务器磁盘性能影响重启升级时长
  • 本文档示例命令中,使用的是 HAP 私有部署版默认数据路径 /data/mingdao,如果你自定义修改过默认数据路径,请务必修改相应的路径。

停止服务

管理器根目录下执行命令:

bash ./service.sh stopall 

备份数据

如果 mongodb 目录已备份可跳过此步骤

备份前需确认服务器磁盘剩余空间是否足够

du -sh /data/mingdao/script/volume/data/mongodb

创建备份,如(实际备份目录自行调整):

mkdir -p /backup && tar -zcvf /backup/mongodb3.4_$(date +%Y%m%d%H%M%S).tar.gz /data/mingdao/script/volume/data/mongodb

升级版本

MongoDB 升级需逐版本依次升级。3.4 升级到 4.4 需要依次升级到 3.6、4.0、4.2、4.4,一共需执行 4 次升级命令。
升级过程中如果提示版本不匹配,则需要重复执行上一个升级命令(如:3.4 升级到 3.6 执行成功后,3.6 升级到 4.0 提示失败,则需要再次执行 3.4 升级到 3.6 的命令,直到输出 exit upgrade),如果尝试多次依然出错则可通过 /data/mingdao/script/volume/data/mongodb/upgrade-xxxx.log 查看具体原因。

拉取升级辅助镜像(离线包下载):

docker pull registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0

执行升级命令:

3.4 到 3.6

docker run -i --rm -v /data/mingdao/script/volume/data/mongodb:/data/mongodb registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 3.4 3.6'

3.6 到 4.0

docker run -i --rm -v /data/mingdao/script/volume/data/mongodb:/data/mongodb registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 3.6 4.0'

4.0 到 4.2

docker run -i --rm -v /data/mingdao/script/volume/data/mongodb:/data/mongodb registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 4.0 4.2'

4.2 到 4.4

docker run -i --rm -v /data/mingdao/script/volume/data/mongodb:/data/mongodb registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 4.2 4.4'

最终输出 newRunVersion: 4.4 字样说明升级完成。 👏 👏

几种常见输出说明

已成功升级到目标版本

oldRunVersion: 4.0
Upgrade 4.0 to 4.2...
{ "ok" : 1 }
newRunVersion: 4.2

已成功执行过目标版本升级脚本

oldRunVersion: 4.2
exit upgrade 4.0 to 4.2

版本不匹配,需再次执行上一个成功升级的命令

ERROR: child process failed, exited with error number 100
To see additional information in this output, start without the "--fork" option.
Failed