新建 PolarDB MySQL 数据库至 OceanBase 数据库 MySQL 租户的数据迁移项目

本文为您介绍如何迁移 PolarDB MySQL 数据库的数据至 OceanBase 数据库 MySQL 租户。

前提条件

  • 已为源端 PolarDB MySQL 数据库和目标端 OceanBase 数据库 MySQL 租户创建专用于数据迁移的数据库用户,并赋予其相关权限。

    数据库

    结构迁移

    全量迁移

    增量同步

    PolarDB MySQL 数据库

    SELECT 权限

    如果是 PolarDB MySQL 8.0 版本,请额外赋予 SHOW VIEW 权限

    SELECT 权限

    REPLICATION SLAVE、REPLICATION CLIENT、SHOW VIEW 和 SELECT 权限

    OceanBase 数据库 MySQL 租户

    CREATE、CREATE VIEW、SELECT、INSERT、UPDATE 和 DELETE 权限

    读写权限

    读写权限

  • 已创建源端和目标端的数据源。

  • 已开启 Binlog 的 ROW 模式,详情请参见 开启 Binlog

使用限制

  • PolarDB MySQL 数据库版本必须是 5.6、5.7 或 8.0 版本。

  • PolarDB MySQL 数据库至 OceanBase 数据库 MySQL 租户的反向增量中,当 OceanBase 数据库 MySQL 租户为 3.2x 以下的版本且具有全局唯一索引的多分区表时,如果您更新了表的分区键的值,可能导致数据迁移过程中丢失数据。

数据类型映射

MySQL 数据库

OceanBase 数据库 MySQL 租户

INTEGER

INTEGER

TYNYINT

TYNYINT

MEDIUMINT

MEDIUMINT

BIGINT

BIGINT

SMALLINT

SMALLINT

DECIMAL

DECIMAL

NUMERIC

NUMERIC

FLOAT

FLOAT

REAL

REAL

DOUBLE PRECISION

DOUBLE PRECISION

BIT

BIT

CHAR

CHAR

VARCHAR

VARCHAR

BINARY

BINARY

VARBINARY

VARBINARY

BLOB

BLOB

TEXT

TEXT

ENUM

ENUM

SET

SET

DATE

DATE

DATETIME

DATETIME

TIMESTAMP

TIMESTAMP

TIME

TIME

YEAR

YEAR

创建数据迁移项目

  1. 新建迁移项目。

    1. 登录 OceanBase 控制台

    2. 在左侧导航栏,单击 数据传输>数据迁移

    3. 数据迁移 页面,单击右上角的 新建迁移项目

  2. 选择源和目标 页面,配置各项参数。

    参数

    描述

    迁移项目名称

    建议使用中文、数字和字母的组合。名称中不能包含空格,长度不得超过 64 个字符。

    源端

    如果您已创建 PolarDB MySQL 数据源,请从下拉列表中进行选择。如果未创建,请单击下拉列表中的 添加数据源,在右侧对话框进行添加。参数详情请参见 创建数据源(MySQL)

    目标端

    如果您已创建 OceanBase 数据库 MySQL 租户数据源,请从下拉列表中进行选择。如果未创建,请单击下拉列表中的 添加数据源,在右侧对话框进行添加。参数详情请参见 创建数据源(OceanBase)

    注意

    目标端不支持实例类型为 VPC 内自建数据库的 OceanBase 数据源。

    传输实例

    从下拉列表中选择已购买的传输实例。如果您未购买,请单击右侧的 购买 进行操作。详情请参见 购买传输实例

    场景类型

    包括 仅支持唯一键表迁移支持全部表迁移

    • 唯一键表:指具有主键或唯一约束,且字段具有唯一性的表。

    • 全部表:指具有唯一键和非唯一键的表,但不包含临时表。

  3. 单击 下一步

    如果您选择场景类型为 仅支持唯一键表迁移,还需要单击弹出提示框中的 我知道了

  4. 选择迁移类型及对象 页面,选择当前迁移项目的 迁移类型

    迁移类型 包括 结构迁移全量迁移增量同步全量校验反向增量

    迁移类型

    使用限制

    结构迁移

    PolarDB MySQL 数据库至 OceanBase 数据库 MySQL 租户的结构迁移支持自动创建目标端不存在的库。

    全量迁移

    如果选择 全量迁移,建议您在迁移数据前,使用 ANALYZE 语句收集 MySQL 数据库的统计信息。

    增量同步

    增量同步 包括 数据变更 DMLInsertDeleteUpdate)和 结构变更 DDL,您可以根据需求进行选择,支持的 DDL 详情请参见 增量 DDL 支持的范围和限制增量同步 的使用限制如下:

    • 如果您未选择 结构变更 DDL,在源端添加和删除列时,请遵循以下规则:

      • 添加列时,需要先在目标端添加,再在源端添加。

      • 删除列时,需要先在目标端删除,再在源端删除。

    • 如果您未选择 结构变更 DDL,对于迁移链路中表的 DDL 操作,请先在目标端数据源执行,否则存在数据迁移中断的风险。

    • 如果您选择了 结构变更 DDL,当源端数据库发生 OMS 未支持的增量 DDL 操作时,会存在数据迁移中断的风险。

    全量校验

    • 如果选择 全量校验,建议您在全量校验开始前,分别收集 MySQL 数据库和 OceanBase 数据库 MySQL 租户的统计信息。

    • 如果您选择了 增量同步,且数据变更 DML 选项中未选择所有的 DML,则无法选择 全量校验

    • OMS 仅支持对于具备唯一键的表(主键或唯一约束,且字段具有唯一性)进行全量数据校验。

    反向增量

    反向增量 限时免费,收费时会提前通知您。

  5. 选择迁移类型及对象 页面,选择迁移对象。

    您可以通过 指定对象匹配规则 两个入口选择迁移对象。

    注意

    • 待迁移的表名和其中的列名不能包含中文字符。

    • 当数据库的库名或表名存在“$$”字符时,会影响数据迁移项目的创建。

    • 选择 指定对象,在左侧选中需要迁移的对象,单击 >,将其添加至右侧列表中。您可以选择一个或多个库的表、视图作为迁移对象。

      迁移 PolarDB MySQL 数据库的数据至 OceanBase 数据库 MySQL 租户时,OMS 支持通过文本导入对象、重命名对象名称、设置行过滤、查看列信息,以及移除单个或全部迁移对象。

      操作

      步骤

      导入对象

      1. 在选择区域的右侧列表中,单击右上角的 导入对象

      2. 在对话框中,单击 确定

        注意

        导入会覆盖之前的操作选择,请谨慎操作。

      3. 导入迁移对象 对话框中,输入需要迁移的对象。例如,例如,SCHEMA.TB1 | SCHEMA.TB2 | SCHEMA.TB3=SCHEMA_RENAME.TB3_RENAME,库、表名映射使用等号(=)连接。

        建议迁移对象不超过 2000 个。如果超过该数量,则推荐使用 匹配规则 模式。

      4. 单击 检验合法性

      5. 通过合法性的检验后,单击 确定

      重命名

      OMS 支持重命名库名和表名。

      1. 在选择区域的右侧列表中,鼠标悬停至目标对象。

      2. 单击显示的 重命名

      3. 输入修改后的名称,单击 确定

      设置

      OMS 支持 WHERE 条件实现行过滤,以及查看列信息。

      1. 在选择区域的右侧列表中,鼠标悬停至目标对象。

      2. 单击显示的 设置

      3. 设置 对话框中,输入标准的 SQL 语句中的 WHERE 子句,来配置行过滤。

        只有满足 WHERE 条件的数据才会被同步至目标数据源,以实现数据的行过滤。如果语句中包含 SQL 保留关键字,请添加转义符(`)。

      4. 单击 确定

        您也可以在 查看列 区域,查看迁移对象的列信息。

      移除/全部移除

      OMS 支持移除单个或全部迁移对象。

      • 移除单个迁移对象

        在选择区域的右侧列表中,鼠标悬停至目标对象,单击显示的 移除,即可移除该迁移对象。

      • 移除全部迁移对象

        在选择区域的右侧列表中,单击右上角的 全部移除。在对话框中,单击 确定,即可移除全部迁移对象。

  6. 单击 下一步

    如果您选择场景类型为 支持全部表迁移,还需要单击弹出提示框中的 下一步

  7. 迁移选项 页面,配置各项参数。

    分类

    参数

    描述

    基本配置

    展示所选传输实例的规格,不支持修改。

    高级配置

    全量迁移是否允许目标表非空

    全量迁移允许目标表非空时,全量校验采用的是 in 判断,无需移除全量校验。
    注意

    选择迁移类型及对象 页面选中 全量迁移,才支持设置该选项。

    全量迁移是否允许索引不一致

    根据业务需求,设置全量迁移是否允许索引不一致。

  8. 单击 预检查,系统对数据迁移项目进行预检查。

    预检查 环节,OMS 会检查数据库用户的读写权限、数据库的网络连接等是否符合要求。全部检查项目均通过后才能启动数据迁移项目。如果预检查报错,请排查并处理问题后,重新执行预检查,直至预检查成功。

  9. 单击 启动项目

    如果您暂时无需启动项目,请单击 保存,跳转至数据迁移项目的详情页面,您可以根据需要进行手动启动。如果您需要查看详情,请参见 查看数据迁移项目的详情

启动数据迁移项目

全部检查项目检查完成后,当且仅当全部成功可以进入启动项目。有失败的检查项目需要手动修复后,在当前界面复检。数据迁移项目启动后,依次执行选择的迁移类型:

  1. 结构迁移

    负责迁移源库中的数据对象定义(表、索引、约束、注释和视图等)至 OceanBase 目标库中,会自动过滤临时表。

    当源端数据库非 OceanBase 数据库时,会依据目标 OceanBase 租户类型的语法定义标准进行数据类型和 SQL 语法的自动转换和拼装,然后复制至 OceanBase 目标库中。

    您可以对目标对象进行以下操作:

    • 查看创建语法:单击后,您可以 查看表创建语法修改索引创建语法

      如果表创建语法完全兼容,为您展示在 OBServer 执行的 DDL 语法。不完全兼容,则展示转换后的创建语法。

    • 修改创建语法并重试:运行失败的 DDL 和报错,您可以检查并修改该条 DDL 转换结果的定义,再次迁移至目标端。

    • 查看数据库返回码:失败的结构迁移任务,展示 DDL 语句和 OBServer 上执行的错误信息。

    • 重试/重试全部失败对象:失败的结构迁移任务,您可以依次进行重试,也可以 重试全部失败对象

    • 跳过/批量跳过:失败的结构迁移任务,您可以依次跳过。您也可以批量选择需要移除的对象,单击右上角的 批量跳过。跳过对象时,索引会一并跳过。

    • 移除/批量移除:失败的结构迁移任务,您可以依次进行移除。您也可以批量选择需要移除的对象,单击右上角的 批量移除。移除对象时,索引会一并移除。

  2. 全量迁移

    迁移源库表的存量数据至 OceanBase 库对应的表中。您可以在 全量迁移 页面,查看 表对象表索引。只有表对象和表索引均迁移完成,全量迁移的状态才会显示已完成。在 表索引 页面,单击目标表对象后的 查看创建语法,即可查看索引创建语法。

    全量迁移加上增量同步,可以确保目标端数据库与源端数据库的最终一致性。如果全量迁移过程中有失败的对象,会为您展示具体的失败原因。

    注意

    如果您在选择 迁移类型 时未配置 结构迁移,则全量迁移时,OMS 会以源端和目标端匹配的字段进行迁移,不会检查表结构是否一致。

    在全量迁移完成之后,且后续步骤已启动的情况下,不允许在 运维监控 > 组件 > Checker 页面,单击目标 Checker 组件后的 重跑

  3. 增量同步

    增量同步任务开始后,会同步源库发生变化的数据(新增、修改或删除)至 OceanBase 数据库对应的表中。

    当源库不断有业务写入时,OMS 会在全量数据迁移启动前,启动增量拉取模块,以拉取源实例中的增量更新数据,对其进行解析、封装,并存储至 OMS 中。

    当全量数据迁移完成后,OMS 会启动增量数据回放模块,从增量数据拉取模块中获取增量数据。增量数据经过过滤、映射和转换后,再同步至目标实例中。

    您可以在增量同步区域查看延迟时间、当前位点时间,以及迁移流量等增量同步性能。

  4. 全量校验

    在全量数据迁移完成,增量数据迁移至目标端并与源端基本追平后,OMS 会自动发起一轮针对源库配置的数据表和目标表的全量数据校验任务。

    注意

    如果您在选择 迁移类型 时未配置 结构迁移,则全量校验时,OMS 会以源端和目标端匹配的字段进行校验,不会检查表结构是否一致。

    全量校验期间,如果源端对表进行 createdropalterrename 操作,可能导致全量校验退出。

    增量数据同步过程中,您也可以发起自定义的数据校验,OMS 会提供相应的接口。

    针对校验出不一致的数据,您可以查看具体的列信息。并且 OMS 会提供以源端为基准,在目标端进行订正操作的 SQL 脚本。

    OMS 支持 执行中 的迁移项目跳过全量校验。在 全量校验 页面,单击 跳过全量校验,并在弹出对话框中,单击 确定

    全量校验完成后,您可以单击 进入下一阶段,启动正向切换。进入切换流程后,您将无法复检当前校验任务进行数据比对和数据订正。

  5. 正向切换

    正向切换(传统意义上的系统割接流程的抽象化、标准化)不会操作业务应用连接的切换,是 OMS 的数据迁移链路配合应用切换前后需要执行的任务流。您需要保证在应用连接切换至目标端前完成正向切换的全部流程。

    正向切换是选择数据迁移便会编排进来的一个流程,您需要终止正向增量同步,删除迁移依赖的附加列和唯一索引,补充在同步过程中被 OMS 过滤掉 Check 约束,并激活目标端 Trigger/FK (迁移前该类对象需要被禁用,否则将引起数据不一致)等,保证新迁移出来的数据库完整、可用。

    如果您配置了反向增量,切换会多编排进来启动反向增量以及禁用源端 Trigger/FK 的子任务,启动从目标端到源端的实时增量同步,保障业务数据回流至原源端数据库,提供随时切换应用的可能性。

    1. 启动正向切换

      该步骤不会停止链路,仅确认即将开始执行的切换流程。用户进入至正向切换任务流时,需要手动单击 启动正向切换

      注意

      启动正向切换前,请确保源端数据源为即将停写或者已经停写状态。
    2. 切换预检查

      用于检查当前项目状态是否具备切换条件,会进行同步延迟检查。如果启动增量同步后,延迟在 15 秒内,则预检查通过。如果未启动增量同步,则预检查自动通过。

      如果预检查通过,会自动执行下一步操作。如果预检查未通过,会提示报错详情。

      如果预检查未通过,您可以进行 重试跳过 操作。

      如果单击 跳过,需要在弹出的对话框中,再次单击 跳过

    3. 确认源端停写

      确认源端停写 区域,单击 确定,确认源端无增量数据产生。

    4. 确认同步追平停写位点

      OMS 自动检查源端和目标端处于一致位点。检查完成后,展示当前增量同步延迟时间和增量同步位点。

    5. 停止正向同步

      停止源端到目标端的增量同步。如果停止失败,您可以进行 重试跳过 操作。

    6. 执行数据库对象处理

      该步骤会完成数据库对象的迁移,删除 OMS 附加列和索引,补充结构迁移自动忽略的约束,确认 Trigger 或 Sequence 等对象已经手工迁移完成,以及确认源端 Trigger 或 FK 已关闭。

      您需要手动单击 运行,来执行数据库对象。对于运行中的项目,您可以执行 查看日志跳过 操作。自行处理的项目需要手动单击 标记完成

    7. 启动反向增量

      启动反向增量 区域,单击 启动反向增量,启动目标端到源端的增量写入。等待页面提示 反向增量启动成功 即可。

  6. 反向增量启动成功后,单击 反向增量 页签,查看 启动时间反向同步性能 等详情。

    反向增量性能包括:

    • 延迟时间:目标端增量变更被同步至源端的滞后时间,单位为秒。

    • 迁移流量:目标端增量变更数据被同步至源端的流量吞吐,单位为 KB/s。

阿里云首页 云数据库 OceanBase 相关技术圈