写点什么

【YashanDB 知识库】服务端是 GBK 编码,导致从 22.2.12.100 升级到 22.2.13.100 失败问题

作者:YashanDB
  • 2024-07-26
    广东
  • 本文字数:741 字

    阅读完需:约 2 分钟

问题现象

问题单:22.2.12.100 升级到 22.2.13.100 失败


现象:如下图,从 22.2.12.100 升级到 22.2.13.100 失败,报错。


问题风险及影响

版本升级失败,影响上线

问题发生版本

客户版本:22.2.12.100


现在版本已经修改掉这个问题,升级比较时忽略掉"----"开头的分隔符和结果前后的空格。

问题发生原因

表现原因:执行升级脚本,/home/yashan2/yasdb_home/yashandb/22.2.13.100/upgrade_tmp/admin/upgrade/22.2.12/preupgrade.sql 后,结果和 preupgrade.out 匹配失败,导致升级失败。


根因:服务端是 gbk、客户端是 utf-8 编码。yasql 对于 gbk 和 utf 打印格式不同,导致结果匹配失败

解决方式及规避方法

规避方法:


原生客户端和升级客户端编码格式都设置为 GBK 编码


1、vi 22.2.12.100/client/yasc_env.ini


CHARACTER_SET=GBK


2、vi 22.2.13.100/client/yasc_env.ini


CHARACTER_SET=GBK


3、./bin/yasboot cluster upgrade -c yashandb --package /home/yashan2/tmp_upgrade/yashandb-22.2.13.100-linux-x86_64.tar.gz


可以正常升级成功。


解决方式:提问题单修改

问题分析和处理过程

问题分析


查看 yasagent.log,发现是执行脚本后,报错。



对比 preupgrade.out 结果文件,发现是"----------"长度对比不上,导致的问题



代码分析


  • asqlPrintColumnTitles 打印列头信息,根据 columns[i].colWidth 长度来做

  • columnDesc->colWidth = (CodInt16)MIN(columnDesc->bindSize, ASQL_MAX_DISPLAY_WIDTH);

  • bindsize = column->size*maxRatio + 1

  • maxRatio 默认为 1;当客户端和服务端编码不一致时,maxRatio = clientMaxWidth > serverMinWidth ? (clientMaxWidth - 1) / serverMinWidth + 1 : 1;


确认根因为编码不同导致的问题,然后定下规避方案

经验总结

yashandb 版本升级流程中,会调用 preupgrade.sql、postupgrade.sql 脚本,并比较结果判断是否升级成功。

用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
【YashanDB知识库】服务端是GBK编码,导致从22.2.12.100升级到22.2.13.100失败问题_yashandb_YashanDB_InfoQ写作社区