---
title: "单节点升级 | OceanBase 文档中心"
description: 单节点升级 OceanBase 迁移服务（OceanBase Migration Service，OMS）支持 3.2.1 及以上版本直接升级至 4.1.0 版本。本文为您介绍在不同场景下，如何进行单节点升级。 背景信息 OMS 4.1.0 的版本升级包含以下两种场景： 当前版本为 3.2.1 及以上，4.0.1 以…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*L03BS6f-o40AAAAAAAAAAAAADiGDAQ/original) 迁移服务 OMSV 4.1.0 企业版

# 单节点升级

更新时间：2023-12-11 16:55:35

OceanBase 迁移服务（OceanBase Migration Service，OMS）支持 3.2.1 及以上版本直接升级至 4.1.0 版本。本文为您介绍在不同场景下，如何进行单节点升级。

## 背景信息

OMS 4.1.0 的版本升级包含以下两种场景：

- 当前版本为 3.2.1 及以上，4.0.1 以下版本。

  #### 注意

  如果是 OMS 3.2.1 以下的版本，您需要先升级至 3.2.1 版本。
 - 当前版本为 4.0.1 及以上版本。

从 OMS 3.2.1 及以上，4.0.1 以下版本升级至 4.1.0 版本时，需要比 4.0.1 及以上版本升级至 4.1.0 版本多执行以下两个操作：

- 需要进行下文《前提条件》模块内容的确认。
 - 在升级过程中，需要执行升级 JAR。

  #### 说明

  OMS 在 4.0.1 版本完成迁移同步架构融合操作，涉及相关表结构重构。所以如果原 OMS 版本低于 4.0.1 并且需要升级至 4.0.1 及以上的版本，需要执行此操作。**非该场景，请勿执行此操作**。

## 从 4.0.1 及以上版本升级至 4.1.0 版本

1. 如果开启了 HA 功能，请先关闭 HA。

      1. 登录 OMS 控制台。
      2. 在左侧导航栏，单击 **系统管理** > **系统参数**。
      3. 在 **系统参数** 页面，找到 `ha.config`。
      4. 单击该参数名称 **取值** 后的编辑图标。
      5. 在 **修改取值** 对话框中，设置 `enable` 为 `false`，关闭 HA 功能。
 2. 备份数据库。

      1. 暂停 OMS V4.0.2 旧容器，记录时间 T1。

        ```shell
        sudo docker stop ${CONTAINER_NAME}

        ```

        #### 说明

        `CONTAINER_NAME` 为创建容器的名称。
      2. 登录配置文件中的 CM 心跳库，备份数据。

        ```shell
        # 登录配置文件中的 CM 心跳库
        mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -Dcm_hb_402

        # 创建中间表
        CREATE TABLE IF NOT EXISTS `heatbeat_sequence_bak` (
        `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'PK',
        `gmt_created` datetime NOT NULL,
        `gmt_modified` datetime NOT NULL,
        PRIMARY KEY (`id`)
        ) DEFAULT CHARSET=utf8 COMMENT='心跳 sequence 表';

        # 将需要的数据备份至中间表
        INSERT INTO heatbeat_sequence_bak SELECT `id`,`gmt_created`,`gmt_modified` FROM heatbeat_sequence ORDER BY `id` DESC LIMIT 1;

        # 重命名 heatbeat_sequence 表和中间表
        # heatbeat_sequence 用于汇报心跳，获取自增 ID
        ALTER TABLE `heatbeat_sequence` RENAME TO `heatbeat_sequence_bak2`;
        ALTER TABLE `heatbeat_sequence_bak` RENAME TO `heatbeat_sequence`;

        # 删除原来的表
        DROP TABLE heatbeat_sequence_bak2;

        ```
      3. 执行下述命令，手工备份 rm、cm 和 cm_hb 库为 SQL 文件，并确认三个文件的大小不为 0。

        ```shell
        mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false rm_402 > /home/admin/rm_402.sql

        mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false cm_402 > /home/admin/cm_402.sql

        mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false cm_hb_402 > /home/admin/cm_hb_402.sql

        ```

        | 参数 | 描述 |
        | --- | --- |
        | -h | 需要导出的主机信息。 |
        | -P | 连接数据库的端口号。 |
        | -u | 指定连接的用户名。 |
        | -p | 连接数据库的密码。 |
        | --triggers | 导出触发器，默认为 false（不导出）。 |
        | rm_402、cm_402、cm_hb_402 | 此处为备份 rm、cm 和 cm_hb 库为 SQL 文件，格式为 `库名 > 存储 SQL 文件的路径.sql`，请替换为实际环境中的值。 |
 3. 加载下载的 OMS 安装包至 Docker 容器的本地镜像仓库。

   ```shell
   docker load -i <OMS 安装包>

   ```
 4. 启动 OMS V4.1.0 新容器。

   OMS 支持通过 HTTP 协议和 HTTPS 协议访问 OMS 控制台。如果您想要安全访问 OMS，可以提供 HTTPS 证书，并将其挂载至容器内的指定目录。如果使用 HTTP 协议访问 OMS，则无需配置。

   #### 注意

      - 启动 OMS V4.1.0 新容器时，OMS 三个挂载盘的路径需要与升级前保持完全一致。  
       您可以执行 `sudo docker inspect ${CONTAINER_NAME} | grep -A5 'Binds'` 命令，查看之前旧 OMS 容器的挂载盘路径。
      - OMS 3.3.1 及以上版本新增参数 `-e IS_UPGRADE=true`。该参数仅适用于升级场景，且升级场景下必须添加该参数。  

   ```shell
   OMS_HOST_IP=xxx
   CONTAINER_NAME=oms_xxx
   IMAGE_TAG=feature_x.x.x

   docker run -dit --net host \
   -v /data/config.yaml:/home/admin/conf/config.yaml \
   -v /data/oms/oms_logs:/home/admin/logs \
   -v /data/oms/oms_store:/home/ds/store \
   -v /data/oms/oms_run:/home/ds/run \
   # 仅在 OMS 容器中挂载 HTTPS 证书时，需要设置如下两个参数
   -v /data/oms/https_crt:/etc/pki/nginx/oms_server.crt
   -v /data/oms/https_key:/etc/pki/nginx/oms_server.key
   -e OMS_HOST_IP=${OMS_HOST_IP} \
   -e IS_UPGRADE=true \
   --privileged=true \
   --pids-limit -1 \
   --ulimit nproc=65535:65535 \
   --name ${CONTAINER_NAME} \
   work.oceanbase-dev.com/obartifact-store/oms:${IMAGE_TAG}

   ```

   | 参数 | 描述 |
   | --- | --- |
   | OMS_HOST_IP | 宿主机的 IP 地址。 |
   | CONTAINER_NAME | 创建容器的名称。格式为 oms_xxx，请根据具体版本填写 xxx。例如，使用 OMS V4.1.0，则填写 oms_410。 |
   | IMAGE_TAG | 使用 Docker 加载 OMS 安装包后，通过 `docker images` 命令获取到加载的相应镜像的 [IMAGE ID] 或 [REPOSITORY:TAG]，即为相应加载后镜像的唯一标识符 `<OMS_IMAGE>`。 |
   | /data/oms/oms_logs     /data/oms/oms_store     /data/oms/oms_run | `/data/oms/oms_logs`、`/data/oms/oms_store` 和 `/data/oms/oms_run` 可以替换为在您的 OMS 部署服务器上创建的挂载目录，分别存放 OMS 运行过程中产生的日志文件、日志拉取组件和同步组件生成的文件，在本机进行持久化。    **注意：**    在后续的版本重新部署、升级中，挂载目录的位置必须保持不变。 |
   | /home/admin/logs     /home/ds/store     /home/ds/run | `/home/admin/logs`、`/home/ds/store` 和 `/home/ds/run` 为容器内的固定目录，路径不可以修改。 |
   | /data/oms/https_crt（可选）   /data/oms/https_key（可选） | HTTPS 证书在 OMS 容器内的挂载位置。 如果挂载了 HTTPS 证书，OMS 容器内的 Nginx 服务将会运行在 HTTPS 模式下。您必须以 HTTPS 模式访问，才可以使用 OMS 的控制台服务。 |
   | IS_UPGRADE | 升级场景下，必须设置 `IS_UPGRADE=true`。请注意 `IS_UPGRADE` 需要为大写。 |
   | privileged | 为容器授予扩展权限。 |
   | pids-limit | 配置容器的进程数限制，-1 表示不限制。 |
   | ulimit nproc | 配置用户进程数的上限。 |
 5. 进入新容器。

   ```shell
   docker exec -it ${CONTAINER_NAME} bash  

   ```
 6. 在 `root` 目录下，执行元数据初始化操作。

   ```shell
   bash /root/docker_init.sh

   ```

   执行上述命令后，脚本会自动将 OMS 三个数据库的 Schema 变更执行到数据库中。
 7. `docker_init.sh` 脚本执行完成后，请确认机器列表是否正常，且机器均处于 **在线** 状态。

      1. 登录 OMS 控制台。
      2. 在左侧导航栏，单击 **运维监控** > **机器**。
      3. 在 **机器列表** 页面，查看机器列表是否正常。同时，请确认机器的状态均为 **在线**。
 8. 在 **系统参数** 页面，开启 HA 功能，并设置相关参数。

      1. 登录 OMS 控制台。
      2. 在左侧导航栏，单击 **系统管理** > **系统参数**。
      3. 在 **系统参数** 页面，找到 `ha.config`。
      4. 单击该参数名称 **取值** 后的编辑图标。
      5. 在 **修改取值** 对话框中，设置 `enable` 为 `true`，开启 HA 功能，并记录时间 T2。
      6. 建议您设置 `perceiveStoreClientCheckpoint` 为 `true`，设置后则无需记录 T1 和 T2 时间。

        设置 `perceiveStoreClientCheckpoint` 为 `true` 后，`refetchStoreIntervalMin` 保持默认值 30min 即可。HA 会根据下游组件的最早位点时间减去参数 `refetchStoreIntervalMin` 设置的时间启动 Store。例如，下游 connector/jdbc-connector 最早请求位点为 12:00:00，参数 `refetchStoreIntervalMin` 的设置时间为 30 分钟，则 HA 启动的 Store 位点为 11:30:00。

        如果您设置 `perceiveStoreClientCheckpoint` 为 `false`，请根据业务需求修改 `refetchStoreIntervalMin`（回拉时间，单位为分钟）的取值，该取值需要大于 T2-T1 的值。
 9. （可选）如果您需要进行回滚操作，请执行以下步骤。

      1. 根据第 1 步的操作，关闭 HA 功能。
      2. 暂停升级后的新容器，记录时间 T3。

        ```
      3. 连接元数据库，执行下述命令。

        ```shell
        drop database rm_402;
        drop database cm_402;
        drop database cm_hb_402;

        create database rm_402;
        create database cm_402;
        create database cm_hb_402;

        ```
      4. 将第 2 步中备份的数据库 SQL 文件，还原为原数据库。

        ```shell
        mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/rm_402.sql" -Drm_402

        mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/cm_402.sql" -Dcm_402

        mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/cm_hb_402.sql" -Dcm_hb_402

        ```
      5. 重启 OMS V4.0.2 旧容器。

        ```shell
        sudo docker restart ${CONTAINER_NAME}

        ```
      6. 在 **系统参数** 页面，开启 HA 功能。

        #### 说明

             - 建议您设置 `perceiveStoreClientCheckpoint` 为 `true`。
             - HA 功能开启后会自动容灾 Store，并自动拉起 Incr-Sync 组件，您还需要手动恢复 Full-Import 组件。
 10. 升级完成后，请先删除浏览器缓存，再进行登录。

## 从 3.2.1 及以上，4.0.1 以下版本升级至 4.1.0 版本

### 前提条件

- 升级前，您需要检查是否存在重名的数据迁移和数据同步项目。如果存在，请对重名的项目名称进行修改，确保不要出现两个或多个项目的名称相同。

  检查是否存在重名项目的命令如下：

     - 数据迁移项目

      ```sql
      SELECT project_name,count(*) AS count,group_concat(id) AS ids FROM oms_project WHERE project_status != "DELETED" GROUP BY project_name HAVING count(*) > 1;

      ```
     - 数据同步项目

      ```sql
      SELECT project_name,count(*) AS count,group_concat(id) AS ids FROM oms_sync_project WHERE project_status != "DELETED" GROUP BY project_name HAVING count(*) > 1;

      ```

  如果存在重名项目，请根据实际情况依次修改项目名称。命令如下：

     - 数据迁移项目

      ```sql
      UPDATE oms_project SET project_name=<数据迁移项目的新名称> WHERE id=<数据迁移项目 ID>;

      ```sql
      UPDATE oms_sync_project SET project_name=<数据同步项目的新名称> WHERE id=<数据同步项目 ID>;

      ```
 - 如果您的使用场景中存在级联场景（即某个 OceanBase 数据源，作为 A 项目的目标端的同时，也是 B 项目的源端），并且您曾更新过 Writer 的 `blackRegionNo` 参数，则您需要进行以下检查：

     1. 在 OMS 容器内部，执行下述命令，获取 `cm_location` 对应的数字 xxx。

       ```sql
       cat /home/admin/conf/config.yaml  | grep 'cm_location'

       ```
     2. 登录 OMS 的 `drc_cm` 数据库，执行下述命令。

       ```sql
       SELECT * FROM config_job WHERE `key`='sourceFile.blackRegionNo' AND VALUE!=xxx;

       ```

       如果查询结果非空，且该级联项目仍在使用，请联系 OMS 值班同学处理。否则请继续升级操作。

### 操作步骤

此处以升级 OMS 3.4.0 版本至 4.1.0 版本为例，操作如下：

1. 如果开启了 HA 功能，请先关闭 HA。
 2. 备份数据库。

      1. 暂停 OMS V3.4.0 旧容器，记录时间 T1。

        ```

        ```shell
        # 登录配置文件中的 CM 心跳库
        mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -Dcm_hb_340

        # 创建中间表
        CREATE TABLE IF NOT EXISTS `heatbeat_sequence_bak` (
        `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'PK',
        `gmt_created` datetime NOT NULL,
        `gmt_modified` datetime NOT NULL,
        PRIMARY KEY (`id`)
        ) DEFAULT CHARSET=utf8 COMMENT='心跳 sequence 表';

        # 将需要的数据备份至中间表
        INSERT INTO heatbeat_sequence_bak SELECT `id`,`gmt_created`,`gmt_modified` FROM heatbeat_sequence ORDER BY `id` DESC LIMIT 1;

        # 重命名 heatbeat_sequence 表和中间表
        # heatbeat_sequence 用于汇报心跳，获取自增 ID
        ALTER TABLE `heatbeat_sequence` RENAME TO `heatbeat_sequence_bak2`;
        ALTER TABLE `heatbeat_sequence_bak` RENAME TO `heatbeat_sequence`;

        ```shell
        mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false rm_340 > /home/admin/rm_340.sql

        mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false cm_340 > /home/admin/cm_340.sql

        mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false cm_hb_340 > /home/admin/cm_hb_340.sql

        ```
 3. 加载下载的 OMS 安装包至 Docker 容器的本地镜像仓库。

   ```
 5. 进入新容器。

   ```
 6. 执行下述命令，暂停 oms_console，使其保持为 STOPPED 状态。

   ```shell
   supervisorctl stop oms_console

   ```
 7. 确认 CM/Supervisor 组件处于 RUNNING 状态后，请参考如下命令执行升级 JAR。

   #### 注意

   实际执行时，请根据实际情况替换参数值。

   ```shell
   /opt/alibaba/java/bin/java -jar correction-1.0-SNAPSHOT-jar-with-dependencies.jar -mupgrade -y/home/admin/conf/config.yaml -ltrue

   ```

   | 参数 | 描述 |
   | --- | --- |
   | -m | 运行模式，支持 UPGRADE（执行升级操作）。 |
   | -y | OMS 配置文件的绝对路径。 |
   | -l | 表示是否是最后一个升级节点。单地域场景下，本参数需要设置为 `true`。多地域场景下，前面几个地域升级时，需要设置为 `false`，且执行直到最后一个地域升级时，才可以设置为 `true`。   说明：多地域多节点场景下，每个地域只需要选取第一个节点执行升级 JAR 即可。最后一个地域执行升级时，需要将 `-l` 参数设置为 `true`。 |
 8. 执行完成升级 JAR 后，在 `root` 目录下，执行元数据初始化操作。

   ```

   执行上述命令后，脚本会自动将 OMS 三个数据库的 Schema 变更执行到数据库中。
 9. `docker_init.sh` 脚本执行完成后，请确认机器列表是否正常，且机器均处于 **在线** 状态。
 10. 在 **系统参数** 页面，开启 HA 功能，并设置相关参数。

         如果您设置 `perceiveStoreClientCheckpoint` 为 `false`，请根据业务需求修改 `refetchStoreIntervalMin`（回拉时间，单位为分钟）的取值，该取值需要大于 T2-T1 的值。
 11. （可选）如果您需要进行回滚操作，请执行以下步骤。

         ```shell
         drop database rm_340;
         drop database cm_340;
         drop database cm_hb_340;

         create database rm_340;
         create database cm_340;
         create database cm_hb_340;

         ```shell
         mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/rm_340.sql" -Drm_340

         mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/cm_340.sql" -Dcm_340

         mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/cm_hb_340.sql" -Dcm_hb_340

         ```
       5. 重启 OMS V3.4.0 旧容器。

         #### 说明

              - 建议您设置 `perceiveStoreClientCheckpoint` 为 `true`。
              - HA 功能开启后会自动容灾 Store，并自动拉起 Incr-Sync 组件，您还需要手动恢复 Full-Import 组件。
 12. 升级完成后，请先删除浏览器缓存，再进行登录。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
