---
url: /v6.2/metadb-upgrade.md
---
# Metadb POSTGRESQL 升级

本文介绍 Metadb 的大版本升级所需的操作。

* [单机/集群部署升级](#单机集群部署升级)
* [容器部署升级](#容器升级部署)
* [k8s 部署升级](#k8s-部署升级)
* [windows 部署升级](#windows-部署升级)

## 单机/集群 部署

### 升级前验证

启动metadb服务后出现以下提示, 表示您的 metadb 版本低于当前 HENGSHI SENSE 内置版本
![](/images/metaslave/metadb_upgrade2.png)

在安装升级时出现以下提示, 表示您的 metadb 版本低于当前 HENGSHI SENSE 内置版本
![](/images/metaslave/metadb_upgrade_info.png)

### 版本升级

执行前需要从hengshi升级包内将metadb新版本拷贝到当前部署的lib目录下 例如;

```shell
cp -a hengshi-sense-[version]/lib/postgresql-17.4-linux-64 {HENGSHI_HOME}/lib/
```

```shell
cd {HENGSHI_HOME}
bin/hengshi-sense-bin stop hengshi ## 停止hengshi服务
bin/hengshi-sense-bin stop metadb ## 保证 metadb 升级操作前，服务处于停止状态。
bin/hengshi-sense-bin upgrade metadb ## 升级操作
```

出现下面提示显示您的 metadb 数据库已经升级完成
![](/images/metaslave/metadb_upgrade_sucess.png)

> \[!TIP] 提示
> 如果自行准备postgresql安装包 可在hengshi-sense-env.sh文件中配置export METADB_VERSION="17.4" 变量指定升级版本

### 版本回滚

1. 升级过程中出现异常信息，请执行下述操作完成版本回滚操作\
   其中要回滚的程序 postgresql-x.y.z 为升级前的 postgresql 版本号，本例中为 postgresql-13.5.4-linux-64

```shell
cd {HENGSHI_HOME}
rm -rf pg_data
mv pg_data_bak pg_data
cd /opt/hengshi/lib
rm -rf pgsql
ln -s postgresql-13.5.4 pgsql
```

### 旧数据清理

待升级以及启动衡石，登录确认业务数据正常后，可以执行以下操作清理旧数据：

```shell
cd /opt/hengshi
rm pg_data_bak -rf
```

## 容器 部署

### 升级前验证

请联系售后人员，确认当前 metadb 版本信息，升级 metadb 版本信息。
例如：

1. 正在运行衡石版本为 5.4.6, metadb 版本为 postgresql-13.5
2. 待升级衡石版本为 6.0.0, metadb 版本为 postgresql-17.4

### 版本升级

1. 升级 metadb 服务主版本，需要使用升级镜像 **hengshi-sense:metadb-upgrade-X.0** ，请先获取对应镜像，其 tag 中 X.0 为衡石的主版本号
2. 修改.env 文件，HS_IMAGE_TAG=$TAG 将$TAG 配置成 `metadb-upgrade-X.0` 升级镜像 tag
3. 修改 docker-compose.yaml 文件，在 metadb 服务下 增加如下配置 ，注意 13.5.4 信息是当前 metadb 版本编号

```text
environment:
      PG_VERSION: 13.5.4
```

**说明**：PG_VERSION 可以填详细的 13.5.4 版本号，也可以只填 13.5 版本号，升级程序会匹配其主版本号 13 对应的可用最新版本

4. 升级前操作

```shell
# 停止 hengshi 服务
docker-compose stop hengshi

# 停止 metadb 服务
docker stop hengshi-metadb
docker rm -f hengshi-metadb

# 启动 metadb-upgrade-X.0
docker-compose up -d hengshi-metadb
```

5. 执行升级操作

```shell
# 确保metadb-upgrade容器状态为Up，才能继续执行升级操作。
docker-compose run --rm metadb upgrade metadb
```

![](/images/metaslave/metadb_upgrade_sucess.png)
出现上面提示表示您的 metadb 数据库升级完成

6. 修改.env 文件，HS_IMAGE_TAG=$TAG 将$TAG 配置成 `X.0` 升级镜像 tag, 比如当前例子应为 `6.0.0`

### 版本回滚

1. 升级过程中出现异常信息，请执行下述操作完成版本回滚操作
2. 确认 env 配置文件信息，HSHOME 地址信息

```shell
cd $HSHOME #进去到 HSHOME 配置的目录下
cd hsdata
rm -rf pg_data
mv pg_data_bak pg_data
```

3. 回滚完成后恢复 .env 文件中镜像 tag 到旧版本, 在本例中为 5.4.6

## k8s 部署

### 升级前验证

请联系售后人员，确认当前 metadb 版本信息，升级 metadb 版本信息。
例如：

1. 正在运行衡石版本为 5.4.6, metadb 版本为 postgresql-13.5
2. 待升级衡石版本为 6.0.0, metadb 版本为 postgresql-17.4

### 版本升级

1. 升级 metadb 服务版本，需要使用升级镜像 **hengshi-sense:metadb-upgrade-X.0**，请先获取对应镜像，其 tag 中 X.0 为衡石的主版本号
2. 修改 metadb.yaml 中 image: registry.hengshi.org/hengshi-sense:5.4.6 镜像版本为 hengshi-sense:metadb-upgrade-X.0
3. 修改 configmap.yaml 配置参数 增加如下配置，注意 13.5.4 信息是当前 metadb 版本编号

```text
PG_VERSION: 13.5.4
```

**说明**：PG_VERSION 可以填详细的 13.5.4 版本号，也可以只填 13.5 版本号，升级程序会匹配其主版本号 13 对应的可用最新版本

4. 升级前操作

```shell
# 停止 hengshi 服务
kubectl -n hengshi scale deployment hengshi-sense --replicas=0

# 停止 metadb 服务
kubectl -n hengshi scale sts metadb --replicas=0

# 启动 metadb-upgrade-X.0 服务(请确认 metadb.yaml 中的镜像地址已经修改)
kubectl -n hengshi apply metadb.yaml
kubectl -n hengshi scale sts metadb --replicas=1

```

5. 执行下列升级操作

```shell
# 确保metadb-upgrade容器状态为Up，才能继续执行升级操作。
kubectl -n hengshi exec -it metadb-0 -- /docker-entrypoint.sh upgrade metadb single
```

![](/images/metaslave/metadb_upgrade_sucess.png)
出现上面提示表示您的 metadb 数据库升级完成

5. 修改 metadb.yaml 中 image: registry.hengshi.org/hengshi-sense:metadb-upgrade-X.0 镜像版修改为主服务版本，比如当前例子应为 `6.0.0`

### 版本回滚

1. 升级过程中出现异常信息，请执行下述操作完成版本回滚操作

```shell
kubectl -n hengshi exec -it metadb-0 -- /bin/bash
cd /opt/hengshi
rm -rf pg_data
mv pg_data_bak pg_data
```

2. 回滚完成后恢复 metadb.yaml 文件中镜像 tag 到旧版本, 在本例中为 5.4.6

## windows 部署

### 升级前验证

确定当前版本，查看**安装目录下\pg_data\PG_VERSION**文件内容，确定当前 metadb 版本。

> \[!CAUTION] 请注意
> 确认当前 安装目录\lib\ 目录下存在升级前 metadb 版本程序
> 如 PG_VERSION 文件内容为 9.6，lib\ 目录下应存在 postgresql-9.6.2-windows-64 程序目录

### 版本升级

1. 开始升级，输入**待升级版本程序名称**
   ![](/images/windows/windows-metadb-upgrade.jpg)

2. 点击开始升级按钮
   ![](/images/windows/windows-metadb-upgrade-sucess.jpg)

3. 出现**升级完成**提示，此次升级工作完成

* 提示：升级后出现 pg_data_bak 目录，此目录为旧版本数据库文件，确认升级后数据库无误后此文件可根据情况清理。

### 版本回滚

1. 升级过程中出现异常信息，请执行下述操作完成版本回滚操作。
2. 删除 pg_data 目录，重命名 pg_data_bak 目录为 pg_data 目录。
3. 编辑**安装目录\bat\common.bat**文件，将 pgsql 变量修改为**pgsql=postgresql-9.6.2-windows-64**。
   ![img.png](/images/windows/windows-metadb-restore.png)
