一、背景
磐维数据库发布了V2.0-S3.0.2_B02版本,功能也得到了进一步完善。本文主要在测试环境中演示磐维数据库(B模式)从V2.0-S2.0.3_B01升级到V2.0-S3.0.2_B02的整个过程,方便大家在需要时参考查阅。
环境信息:
| 主机名 | ip地址 | OS版本 | 内存、CPU | 节点角色 | 数据库端口 | cmserver端口 |
|---|---|---|---|---|---|---|
| node1 | 192.*.*.60 | Centos7.9 | 4G 、 1个双核 | 主节点 | 17700 | 18800 |
| node2 | 192.*.*.62 | Centos7.9 | 4G 、 1个双核 | 从节点 | 17700 | 18800 |
| node3 | 192.*.*.64 | Centos7.9 | 4G 、 1个双核 | 从节点 | 17700 | 18800 |
二、升级前须知
由于升级期间需停止数据库运行,请提前规划业务中断窗口期。确保在业务中断窗口期内,数据库 License 未过期。
2.1 升级方式
升级前与升级后的 PanWeiDB 数据库为相同大版本时,版本内部补丁升级的方式选择如下表所示。

2.2 升级流程
1、升级前,用户需明确当前和目标 PanWeiDB 数据库版本并选择合适的升级方式。本步骤需完成升级前检查和备份数据、校验软件包等操作。
2、执行升级时,用户依据指南进行升级。
3、升级执行完成后用户需进行升级验证,验证升级后版本是否正确、系统是否正常等内容。
4、如升级验证不通过或升级失败,需要对升级操作进行回滚和还原。有关升级失败回滚的操作,请联系技术支持。
5、完成以上步骤后升级流程结束。
三、升级前检查(omm用户操作)
3.1 检查当前数据库版本
postgres=# select pw_version();
pw_version
-----------------------------------------------------------------------------
(PanWeiDB_V2.0-S2.0.3_B01) compiled at 2024-05-25 22:37:21 commit e857234 +
product name:PanWeiDB +
version:V2.0-S2.0.3_B01 +
commit:e857234 +
openGauss version:5.0.0 +
host:x86_64-pc-linux-gnu
(1 row)
3.1.1 V2.0-S3.0.2_B01 升级说明
PanWeiDB V2.0-S3.0.2_B01 版本修复了系统视图 information_schema.sequences 查询缓慢的问题。升级到 PanWeiDB V2.0-S3.0.2_B01 的过程中会将 information_schema.sql_identifer 类型改为 name,因此需要重建该系统视图。
如果存在用户自建对象依赖于 information_schema.sql_identifer,则这些对象需要用户手动重新创建。
需要用户手动创建的对象可通过升级日志中的信息查看。查看方式:
cd $GAUSSHOME
ls -al .update #PWPatch升级会在安装目录中创建一个名为.update 的隐藏目录,该目录用于存放升级日志
cd .update/updateLog/omm
grep 'CREATE view' gs_local*.log | grep -v information_schema\|sys.\|all_\|user\|dba_\|element_types\|dtd\|element_types'
注意:如果是PG 兼容模式升级,请联系技术支持获取升级前置脚本,或参阅《PanWeiDB V2.0_V3.0.2_B01 Release Notes》的升级注意事项章节。
3.2 检查license过期情况
# 临时license检查
[omm@node1 log]$ pw_licensetool --view-temporary
license info: Customer:'temporary license', Begins On:'2024-12-01 17:23:43', Expires On:'2025-03-01 17:23:43', MAC:''
# 如果申请了正式license,使用下面命令检查
pw_licensetool --dump= $license_dir
3.3 检查备份是否正常
[omm@node1 log]$ gs_probackup show -B /backup/probackup/
BACKUP INSTANCE 'panweidb'
=======================================================================================================================================
Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Type Status
=======================================================================================================================================
panweidb 9.2 SNV5ES 2024-12-01 19:04:09+08 FULL STREAM 1/0 11s 717MB 16MB 0.98 0/A000028 0/A000270 FILE OK
panweidb 9.2 SNV5B5 2024-12-01 19:02:02+08 FULL STREAM 1/0 14s 717MB 16MB 0.98 0/8000028 0/8000270 FILE OK
3.4 检查数据库集群状态
[omm@node1 ~]$ gs_om -t status --detail
[ CMServer State ]
node node_ip instance state
-----------------------------------------------------------------
1 node1 192.*.*.60 1 /data/panweidb/cm/cm_server Primary
2 node2 192.*.*.62 2 /data/panweidb/cm/cm_server Standby
3 node3 192.*.*.64 3 /data/panweidb/cm/cm_server Standby
[ Cluster State ]
cluster_state : Normal
redistributing : No
balanced : Yes
current_az : AZ_ALL
[ Datanode State ]
node node_ip instance state
-------------------------------------------------------------------
1 node1 192.*.*.60 6001 /data/panweidb/data P Primary Normal
2 node2 192.*.*.62 6002 /data/panweidb/data S Standby Normal
3 node3 192.*.*.64 6003 /data/panweidb/data S Standby Normal
3.5 检查磁盘空间使用率
df -h
建议数据库节点磁盘使用率低于 80% 时再执行升级操作。
3.6 数据库参数检查
升级前请检查以下数据库参数是否配置正确,避免影响数据库升级。
logging_collector=on
enable_prevent_job_task_startup =on
pw_exclude_reserved_words=''
plsql_show_all_error=off
测试环境中检查结果如下图,可以发现,enable_prevent_job_task_startup参数不满足要求:

修改enable_prevent_job_task_startup参数为off:
pw_guc reload -N all -D /data/panweidb/data -c "enable_prevent_job_task_startup=on"
3.7 检查 xlog 目录是否正确
进入 $PGDATA 目录,查看 pg_xlog 目录是否指向正确位置。
cd $PGDATA
ls -al
3.8 字符集检查
升级前检查环境变量中的字符集设置,确保 LC_ALL 的字符集设置与 LANG 一致,如果不一致,修改 LC_ALL,避免影响数据库升级。
echo $LANG
echo $LC_ALL
测试环境中检查结果如下图,可以发现,两个环境变量不一致:

修改LC_ALL:
export LC_ALL=en_US.UTF-8
3.9 检查python环境
python -V
测试环境中检查结果如下图:

使用 pwpatch 升级需在 python3.7 环境下运行,即执行 python3 -V,返回版本为 3.7.* 。升级补丁包中也自带python3.7.9版本,在后面安装python3.7.9。
四、集群升级(omm用户操作)
4.1 停止数据库集群
4.1.1(可选)对于未进行环境隔离集群,需要备份 omm 用户的 .bashrc文件。
cp /home/omm/.bashrc /home/omm/bashrc.bak
4.1.2 备份当前数据库系统目录。
测试环境中数据库安装目录为 /data/panweidb,查看 GAUSSHOME和GPHOME :
[omm@node1 ~]$ echo $GAUSSHOME
/data/panweidb/app
[omm@node1 ~]$ echo $GPHOME
/data/panweidb/tool
备份目录:
mkdir -p /data/panweidb/bak/app
mkdir -p /data/panweidb/bak/tool
export BACKUPDIR=/data/panweidb/bak
cp -r $GAUSSHOME/bin $BACKUPDIR/app/bin
cp -r $GAUSSHOME/share $BACKUPDIR/app/share
cp -r $GAUSSHOME/lib $BACKUPDIR/app/lib
cp -r $GAUSSHOME/include $BACKUPDIR/app/include
cp -r $GPHOME $BACKUPDIR/tool
cp -r $GAUSSHOME/version.cfg $BACKUPDIR/
4.1.3 通过 gs_om 工具停止集群。
gs_om -t stop

查看集群状态,state 列为 Down 表示集群停止成功。
4.1.4 调整数据库配置
注释各节点的 postgresql.conf 文件中的 replconninfo 参数。
#replconnincfo = 'xxxxxxxxxxxxxxxxxxxxxxxxx'
#replconninfo2 = 'xxxxxxxxxxxxxxxxxxxxxxxxx' ...
4.1.5 进行集群解耦。
4.1.5.1 注释数据库定时任务
crontab -e
在文件行前加井号(#),如下所示:
#*/1 * * * * source /etc/profile;(if [ -f ~/.profile ];then source ~/.profile;fi);source ~/.bashrc;nohup /data/panweidb/app/bin/om_monitor -L /data/panweidb/log/omm/cm/om_monitor >>/dev/null 2>&1 &
~
4.1.5.2 停止 om_monitor 进程,其中 $pid 表示进程号。
ps -ef | grep om_monitor
kill -9 $pid
4.1.6 修改数据库安装用户环境变量
本文以数据库安装用户为 omm 为例。
vi /home/omm/.bashrc
export PGUSER=omm
export LC_ALL=en_US.UTF-8
source /home/omm/.bashrc
测试环境中执行结果如下图:

4.2 升级数据库版本
本文以升级安装包(PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64.tar.gz)上传至/soft 目录为例。
4.2.1 解压安装包(root用户操作)
cd /soft
mkdir panwei302
tar -zxvf PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64.tar.gz -C /soft/panwei302/
cd panwei302/patch/
tar -zxvf PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64.tar.gz
解压后的目录如下图:

升级包的名称与解压后 patch 目录中需要解压的 patch 包名相同,请注意区分。
4.2.2 执行以下命令,生成 pwpatch 环境变量(root用户操作)
cd /soft/panwei302/patch/PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64/PWPatch/script
source prepare_env.sh #安装python3.7.9
./pwpatch --setparam -u omm -g dbgrp -a /data/panweidb/app -d /data/panweidb/data -p 17700 -t /data/panweidb/tmp
执行过程如下:


4.2.3 检查环境变量与配置(root用户操作)
./pwpatch -C
执行过程如下:

查看生成的xml文件:

4.2.4 升级前检查(root用户操作)
./pwpatch -P

4.2.5 使用 pwpatch 进行升级(omm用户操作)
su - omm
# export PWPATCH_CONFIGURATION_FILE=/data/panweidb/tmp/pwpatch.ini(如果手工配置了pwpatch 环境变量,这里需要设置)
# source ~/.bashrc
cd /soft/panwei302/patch/PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64/PWPatch/script
./pwpatch --upgrade
执行过程如下:

4.2.6 清理 pwpatch 环境变量(omm用户操作)
./clean_env.sh
4.2.7 查看升级过程中的日志
cd $GAUSSHOME/.update/updateLog/omm
ls -ltr

4.3 验证单节点启停
执行pwpatch --upgrade后,数据库是启动状态,可以直接登录。
gsql -r -d postgres
\q
pw_ctl stop
执行过程如下:

4.4 升级 CM 版本
本节以升级所用的全量安装包(PanWeiDB_V2.0-S3.0.2_B02-install-centos_7-x86_64-no_mot.tar.gz)上传至 /soft 目录为例。
4.4.1 解压安装包(root用户操作)
cd /soft
mkdir panwei302cm
tar -zxvf PanWeiDB_V2.0-S3.0.2_B02-install-centos_7-x86_64-no_mot.tar.gz -C panwei302cm
执行过程如下:

4.4.2 分别将 cm 工具解压到数据库系统目录的 app 目录,将 om 工具解压到数据库系统目录的 tool 目录下,并替换 tool 目录下的version.cfg(root用户操作)
cd panwei302cm
source /home/omm/.bashrc
tar xvf PanWeiDB_V2.0-S3.0.2_B02-CentOS-64bit-cm.tar.gz -C $GAUSSHOME
tar xvf PanWeiDB_V2.0-S3.0.2_B02-CentOS-64bit-om.tar.gz -C $GPHOME
cp $GAUSSHOME/version.cfg $GPHOME/

将 cm 工具解压到数据库系统目录的 app 目录:

将 om 工具解压到数据库系统目录的 tool 目录下:

替换 tool 目录下的version.cfg:

4.4.3 将解压后的文件所有权授予 omm 用户(root用户操作)
cd /data/panweidb/
chown omm:dbgrp -R *
执行过程如下:

4.5 替换 OM 所需文件
OM 工具在进行集群扩容、集群卸载等步骤中需要用到内核安装包,因此在进行升级后,需要拷贝相应文件到对应目录。
下文以/data/panweidb/soft 为旧版本安装包解压目录,该目录会在安装数据库时被记录,对应环境变量 $UNPACKPATH;
/data/panweidb/tool 为 om 工具目录,对应环境变量 $GPHOME。
4.5.1 解压全量包到对应目录。
cd /data/panweidb/
# 删除以往替换 CM 所需文件遗留的 soft_bak 目录,如无可跳过
# rm -rf /data/panweidb/soft_bak
# 将升级前的安装包移动到 soft_bak 中
mv /data/panweidb/soft /data/panweidb/soft_bak
# 创建 soft 目录用于存放新版本安装包
mkdir /data/panweidb/soft
# 解压 om 包,其中 /soft/panwei302/pkg/* 表示 no-mot 包解压后的所有压缩包
cp -r /soft/panwei302cm/* /data/panweidb/soft
tar -zxvf /data/panweidb/soft/*-om.tar.gz
# 授予可执行权限
chmod 755 /data/panweidb/soft


4.5.2 替换升级后的安装包。
cd /data/panweidb/tool
# 删除旧版本安装包
rm -rf *cm.tar.gz *.tar.bz2 *.sha256
cp /soft/panwei302cm/*cm.tar.gz /data/panweidb/tool/
cp /soft/panwei302cm/*tar.bz2 /data/panweidb/tool/
cp /soft/panwei302cm/*om.tar.gz /data/panweidb/tool/
cp /soft/panwei302cm/*.sha256 /data/panweidb/tool/
4.5.3 替换 om 工具的 lib 包
cp -r /data/panweidb/tool/lib /data/panweidb/soft
修改/data/panweidb目录权限:
chown omm:dbgrp -R /data/panweidb
4.6 配置环境变量(可选)
su - omm
mv .bashrc .bashrc.upgrade
cp bashrc.bak .bashrc
4.7 恢复集群环境(omm用户操作)
4.7.1 确认$GAUSSHOME 环境变量是否指向正确路径。
su - omm
echo $GAUSSHOME

4.7.2 使用 gs_om 工具恢复集群环境
找到最开始部署2.0.3集群的xml文件
ls -l /home/omm/cluster_config_template.xml
分发配置文件
gs_om -t generateconf -X cluster_config_template.xml --distribute

node1执行命令后,各个备节点(node2、node3)分发到了最新的静态配置文件:
node1:

node2:

node3:

4.7.3 恢复配置文件。
恢复 postgresql.conf 文件为升级前的配置。
vi postgresql.conf :
enable_prevent_job_task_startup = off
replconninfo='xxxxxxxxxxxxxxxxxxxxxxxxx'
replconninfo2 = 'xxxxxxxxxxxxxxxxxxxxxxxxx' ...
4.7.4 恢复定时任务。
crontab -e
4.8 手工升级其它两台备库
操作步骤请参考4.1-4.7。
4.9 启动集群
gs_om -t start

4.10 检查集群状态
gs_om -t status --detail

4.11 检查数据库版本
select pw_version();

五、升级过程中碰到的问题
问题1:/pwpatch --setparam执行时提示 The environmental variable $PGDATA is empty. or variable has exceeded maximum length
[root@node1 script]# ./pwpatch --setparam -u omm -g dbgrp -a /data/panweidb/app -d /data/panweidb/data -p 17700 -t /data/panweidb/tmp
[GAUSS-51800] : The environmental variable $PGPORT is empty. or variable has exceeded maximum length
[root@node1 script]# ./pwpatch --setparam -u omm -g dbgrp -a /data/panweidb/app -d /data/panweidb/data -p 17700 -t /data/panweidb/tmp
[GAUSS-51800] : The environmental variable $PGDATA is empty. or variable has exceeded maximum length
解决办法:
vi /home/omm/.bashrc
加入:
export PGPORT=17700
export PGDATA=/data/panweidb/data
问题2:pwpatch -P执行时提示 python3: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory
[root@node2 script]# ./pwpatch -P
Before upgrading, please back up the original product and user data package, stop the database service, and maually detach the node from the cluster. The upgrade process may involve modifying the metadata and switching the upgrade mode. The service will be started during the upgrade process. Please specify a dedicated port number for the upgrade to avoid the upgrade process being affected by external commands. And do not put any backup files in the patch directory. Do not delete any files and directories generated by unzipping the patch tar package, and do not destroy the directory structure, including the outermost directory with the same name as the tar package, Do you want to continue the upgrade (please input yes or no):
yes
Begin preparing patch.
Successfully prepared patch.
Begin completing the link of the software.
Successfully completed the link of the software.
Begin preparing patches and environment variables.
Performing cmd: python3 '/soft/panwei302/patch/PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64/PWPatch/script/gs_preinstall' -U 'omm' -G 'dbgrp' -X '/data/panweidb/tmp/pw_cluster_omm_dbgrp_17700.xml' --non-interactive.
Traceback (most recent call last):
File "./pwpatch", line 3072, in main
func()
File "./pwpatch", line 2223, in pwpatchPrepare
+ "Error:\n%s." % output)
Exception: [GAUSS-51400] : Failed to execute the command: python3 '/soft/panwei302/patch/PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64/PWPatch/script/gs_preinstall' -U 'omm' -G 'dbgrp' -X '/data/panweidb/tmp/pw_cluster_omm_dbgrp_17700.xml' --non-interactive.Error:
python3: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory.
[GAUSS-51400] : Failed to execute the command: python3 '/soft/panwei302/patch/PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64/PWPatch/script/gs_preinstall' -U 'omm' -G 'dbgrp' -X '/data/panweidb/tmp/pw_cluster_omm_dbgrp_17700.xml' --non-interactive.Error:
python3: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory.
原因:
忘记执行/soft/panwei302/patch/PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64/PWPatch/script/prepare_env.sh脚本
解决办法:
sh /soft/panwei302/patch/PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64/PWPatch/script/prepare_env.sh
或者
export LD_LIBRARY_PATH=/soft/panwei302/patch/PanWeiDB_V2.0-S3.0.2_B02-patch-centos_7-x86_64/PWPatch/../python3/python3.7.9/lib:$LD_LIBRARY_PATH
六、升级总结
整个升级过程还比较顺利,再次提醒大家,在生产环境中升级前,务必按照文档中的步骤做好各项备份工作,以便在升级失败时能够快速回退到升级前的版本。
关于作者:
专注于Oracle、MySQL、PG、OpenGauss和国产数据库的研究,热爱生活,热衷于分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同进步~~~




