TiDB Data Migration 1.0.x 到 2.0.x 手动升级

优质
小牛编辑
131浏览
2023-12-01

本文档主要介绍如何手动从 DM v1.0.x 升级到 v2.0.x,主要思路为利用 v1.0.x 时的全局 checkpoint 信息在 v2.0.x 集群中启动一个新的增量数据复制任务。

有关如何自动将 DM v1.0.x 升级到 v2.0.x,请参考使用 TiUP 自动导入 DM-Ansible 部署的 1.0 集群

注意:

  • DM 当前不支持在数据迁移任务处于全量导出或全量导入过程中从 v1.0.x 升级到 v2.0.x。
  • 由于 DM 各组件间用于交互的 gRPC 协议进行了较大变更,因此需确保升级前后 DM 集群各组件(包括 dmctl)使用相同的版本。
  • 由于 DM 集群的元数据存储(如 checkpoint、shard DDL lock 状态及 online DDL 元信息等)发生了较大变更,升级到 v2.0.x 后无法自动复用 v1.0.x 的元数据,因此在执行升级操作前需要确保:
    • 所有数据迁移任务不处于 shard DDL 协调过程中。
    • 所有数据迁移任务不处于 online DDL 协调过程中。

下面是手动升级的具体步骤。

第 1 步:准备 v2.0.x 的配置文件

准备的 v2.0.x 的配置文件包括上游数据库的配置文件以及数据迁移任务的配置文件。

上游数据库配置文件

在 v2.0.x 中将上游数据库 source 相关的配置从 DM-worker 的进程配置中独立了出来,因此需要根据 v1.0.x 的 DM-worker 配置拆分得到 source 配置。

注意:

当前从 v1.0.x 升级到 v2.0.x 时,如在 source 配置中启用了 enable-gtid,则后续需要通过解析 binlog 或 relay log 文件获取 binlog position 对应的 GTID sets。

从 DM-Ansible 部署的 v1.0.x 升级

如果 v1.0.x 是使用 DM-Ansible 部署的,且假设在 inventory.ini 中有如下 dm_worker_servers 配置:

[dm_master_servers]
dm_worker1 ansible_host=172.16.10.72 server_id=101 source_id="mysql-replica-01" mysql_host=172.16.10.81 mysql_user=root mysql_password='VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU=' mysql_port=3306
dm_worker2 ansible_host=172.16.10.73 server_id=102 source_id="mysql-replica-02" mysql_host=172.16.10.82 mysql_user=root mysql_password='VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU=' mysql_port=3306

则可以转换得到如下两个 source 配置文件:

# 原 dm_worker1 对应的 source 配置,如命名为 source1.yaml
server-id: 101                                   # 对应原 `server_id`
source-id: "mysql-replica-01"                    # 对应原 `source_id`
from:
  host: "172.16.10.81"                           # 对应原 `mysql_host`
  port: 3306                                     # 对应原 `mysql_port`
  user: "root"                                   # 对应原 `mysql_user`
  password: "VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU="   # 对应原 `mysql_password`
# 原 dm_worker2 对应的 source 配置,如命名为 source2.yaml
server-id: 102                                   # 对应原 `server_id`
source-id: "mysql-replica-02"                    # 对应原 `source_id`
from:
  host: "172.16.10.82"                           # 对应原 `mysql_host`
  port: 3306                                     # 对应原 `mysql_port`
  user: "root"                                   # 对应原 `mysql_user`
  password: "VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU="   # 对应原 `mysql_password`

从 Binary 部署的 v1.0.x 升级

如果 v1.0.x 是使用 Binary 部署的,且对应的 DM-worker 配置如下:

log-level = "info"
log-file = "dm-worker.log"
worker-addr = ":8262"

server-id = 101
source-id = "mysql-replica-01"
flavor = "mysql"

[from]
host = "172.16.10.81"
user = "root"
password = "VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU="
port = 3306

则可转换得到如下的一个 source 配置文件:

server-id: 101                                   # 对应原 `server-id`
source-id: "mysql-replica-01"                    # 对应原 `source-id`
flavor: "mysql"                                  # 对应原 `flavor`
from:
  host: "172.16.10.81"                           # 对应原 `from.host`
  port: 3306                                     # 对应原 `from.port`
  user: "root"                                   # 对应原 `from.user`
  password: "VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU="   # 对应原 `from.password`

数据迁移任务配置文件

对于数据迁移任务配置文件,v2.0.x 基本与 v1.0.x 保持兼容,可直接复制 v1.0.x 的配置。

第 2 步:部署 v2.0.x 集群

注意:

如果已有其他可用的 v2.0.x 集群,可跳过此步。

使用 TiUP 按所需要节点数部署新的 v2.0.x 集群。

第 3 步:下线 v1.0.x 集群

如果原 v1.0.x 集群是使用 DM-Ansible 部署的,则使用 DM-Ansible 下线 v1.0.x 集群

如果原 v1.0.x 集群是使用 Binary 部署,则直接停止 DM-worker 与 DM-master 进程。

第 4 步:升级数据迁移任务

  1. 使用 operate-source 命令将 命令以 v2.0.x 的数据迁移任务配置文件启动升级后的数据迁移任务。

  2. 使用 query-status 命令确认数据迁移任务是否运行正常。

如果数据迁移任务运行正常,则表明 DM 升级到 v2.0.x 的操作成功。