You need to enable JavaScript to run this app.
导航
迁移至火山引擎版 MySQL
最近更新时间:2024.11.28 17:46:52首次发布时间:2023.01.18 10:42:18

本场景介绍如何在数据库传输服务 DTS 控制台创建公网自建 MySQL 迁移至火山引擎版 MySQL 任务。

前提条件

  • 当数据库实例的接入方式选择的是公网自建时,且数据库实例开启了访问限制,那么在创建数据库传输任务前,您需要将 DTS 服务器 IP 地址添加至数据库实例的白名单或安全组中。不同地域下的 DTS 服务器 IP 地址不同,具体如下所示:
    • 华南 1(广州)、华北 2(上海)和华北 2(北京)的 DTS 服务器 IP 地址是 221.194.189.0/27,157.148.90.32/27,180.184.132.64/27,61.129.54.64/27,220.196.172.32/27,117.135.143.32/27,220.196.168.32/27,116.132.250.32/27,111.45.13.32/27,125.88.248.32/27,180.153.35.32/27,220.181.65.32/27,220.181.65.64/27

    • 亚太东南(柔佛)的 DTS 服务器 IP 地址是 101.47.0.32/27,220.181.65.32/27,220.181.65.64/27

    • 中国香港的 DTS 服务器 IP 地址是 101.47.65.32/28,101.47.65.48/28
        关于 DTS 服务器 IP 地址段的详细信息,请参见添加 DTS 服务器的 IP 地址段

  • 创建数据迁移任务之前,请确认源库和目标库的网络连通性与服务可用性。

  • 您还可以根据预检查项中的说明,来检查源库和目标库中各迁移对象做相应准备。更多详情,请参见预检查项(MySQL)

注意事项

  • 当源库为自建 MySQL 时,您需要关注以下信息:

    • 迁移时,如果源库进行主备切换,会导致迁移任务失败。

    • 在迁移时如果源库执行了重启操作,迁移任务会暂时中断并自动尝试修复。如果任务长时间没恢复,请提交工单联系技术支持。

    • 由于数据库传输服务 DTS 的延迟时间是根据迁移到目标库最后一条数据的时间戳和当前时间戳对比得出,源库长时间未执行 DML 操作可能会导致延迟信息不准确。如果任务显示的延迟时间过大,您可以在源库执行一个 DML 操作来更新延迟信息。

      说明

      当迁移对象为整库时,您可以创建心跳表,心跳表每秒定期更新或写入数据。

  • 当目标库使用的是高权限账号时,数据库传输服务 DTS 会自动在目标端中创建数据库。如果待迁移的数据库名称不符合公网自建 MySQL 的定义规范,您需要在迁移任务前在目标端中创建数据库。

  • 当未勾选增量迁移时,数据迁移期间请勿在源库实例中写入新的数据,以确保数据的一致性。

  • 在进行用户迁移,出现源数据库部分账号不支持迁移时,需先确保业务不受这些账号的缺失而影响运行。

  • 迁移对象非整库时,不支持 OnlineDDL 操作,且增量迁移不支持自动迁移新增的对象及其相关变更。

  • 迁移对象选择的粒度为库或表。若迁移对象选择的是表,则其他对象例如视图、触发器、函数或存储过程等,不会被迁移至目标库。

  • 为保证数据迁移的性能和迁移任务的稳定性,源端的 TRIGGER 和 EVENT 会在增量迁移结束后才进行迁移。

  • 在数据迁移的过程中,若遇到目标库中已存在同主键值或唯一键的情况,DTS 不会保留目标端中冲突的数据,即源端的数据将会覆盖掉目标端的数据。当数据进行冲突覆盖时,如果目标库中存在同名表,可能会导致数据不一致等问题,具体如下所示。建议您通过表名映射的方式、删除或重命名目标库中同名表的方式避免数据不一致等问题降低业务风险。

    • 表结构一致时:迁移的数据将覆盖目标表中与源库主键或唯一键的值相同的记录。

    • 表结构不一致时:可能会导致无法初始化数据,只能迁移部分列数据。

  • 当您想通过专线实现数据迁移时,您可以提交工单联系技术人员。

限制说明

应用限制

类型说明

源库限制

  • 数据库版本:当前支持 5.5、5.6、5.7 和 8.0 的 MySQL 实例。

  • 在源库的实例版本大于等于 5.6 时,需设置参数 gtid_modeON

    说明

    当 MySQL 的版本小于 8.0 且未开启参数 gtid\_mode 时,可能会在数据迁移过程中导致外键级联删除失败,从而造成数据差异。

  • 带宽要求,源库所属的服务器需具备足够出口带宽,否则将影响数据迁移的速率。

  • 数据迁移支持的存储引擎包括 InnoDBMyISAM 和 RocksDB。在数据迁移过程中,如果源库不是 InnoDB 存储引擎,系统会自动将其转换为 InnoDB。暂不支持 MariaDB 数据库引擎。

  • 将 MyISAM 存储引擎转换为 InnoDB 存储引擎时,暂不支持分区表。

  • 待迁移的表需具备主键或唯一非空约束,且字段具有唯一性,否则可能会导致数据不一致。

  • 如需进行增量迁移,Binlog 日志的参数要求:

    • 需开启 Binlog 日志功能。

    • binlog_formatrowbinlog_row_imagefull,否则预检查提示报错,且无法成功启动数据迁移任务。

    • Binlog 日志至少要保留 24 小时,建议保留 7 天以上的日志,否则 DTS 可能因无法获取日志从而导致任务失败,某些情况下也可能导致数据丢失。

  • 涉及外键依赖的表,需要同时迁移,否则将导致数据迁移失败。

  • 单任务中表的数量建议不超过 2 万,库的数量不超过 1000 个。当有大量库表需要迁移时,建议拆分为多个任务。

目标库限制

  • 数据库版本:当前支持 5.7 和 8.0 的 MySQL 实例。

  • 目标数据库的迁移账号权限,会影响视图、存储过程和函数的使用,具体限制如下所示:

    • 当目标数据库的迁移账号具有 SET_USER_ID 权限时,视图、存储过程和函数的限制如下所示:

      • 视图、存储过程、函数会保持原来的 definersql_security

      • 需要先完成账号迁移任务或手动在目标库创建对应账号后,视图、存储过程和函数才可以正常使用。

    • 当目标数据库的迁移账号不具有或不支持 SET_USER_ID 权限时,视图、存储过程和函数迁移后,definer 将会替换为迁移账号,sql_security 会设置为 invoker

      说明

      仅 MySQL 8.0 版本支持设置 SET_USER_ID 权限。

其他限制

  • 建议源库和目标库的 MySQL 版本保持一致,或者从低版本迁移至高版本以保障兼容性。如果是高版本迁移至低版本,可能存在数据库兼容性或数据丢失问题。

  • 执行数据迁移前需评估源库和目标库的性能,建议在业务低峰期执行数据迁移。否则全量数据迁移时 DTS 占用源和目标库一定的读写资源,可能会导致数据库的负载上升。

  • 在迁移过程中,目标数据库可能会产生大量 Binlog 文件,因此导致目标库的磁盘使用量远远大于原实例的磁盘使用量。建议您在迁移或同步前,修改目标数据库 Binlog 的保存策略,避免 Binlog 文件占用过多存储空间。

  • 有库表名映射的迁移任务,存储过程迁移、函数迁移后映射不一定生效。

  • 当源库为 MySQL 8.0 版本时,在配置迁移任务时,您需要手动对以下账号直接授予数据迁移的相关权限:

    • 源库或目标库的账号是通过 Role 进行相关权限授权的。

    • 需要进行用户迁移的账号是通过 Role 进行相关权限授权的。

  • 仅支持对表、视图、存储过程、函数、触发器和事件迁移。

操作限制

  • 在链路创建、库表结构迁移和全量迁移过程,请勿执行库或表结构变更的 DDL 操作否则迁移任务会失败。

  • 当只执行全量迁移时,请勿向源实例写入新的数据,否则会导致源数据库和目标数据库信息不一致。为实时保障数据的一致性,建议您选择结构迁移、全量迁移和增量迁移。

  • 由于使用 gh-ost 或 pt-online-schema-change 等在线 DDL 工具执行 DDL 操作时会生成临时表,在数据迁移过程中,需要注意以下几点:

    • 当需要使用在线 DDL 工具执行 DDL 操作时,需要保证迁移对象是整个数据库,否则会由于临时表无法迁移导致 DDL 失败。

    • 迁移期间请勿使用在线 DDL 工具执行轻量 DDL 操作例如小表增加字段等,否则可能由于 DDL 临时表存在时间过短导致 DDL 迁移失败。

    • 表映射(表重命名)功能和迁移 Online DDL 临时表功能冲突,只能选择一个功能使用。

支持的 SQL 操作

增量迁移支持的 SQL 操作如下表所示。

操作类型SQL 操作语句
DMLINSERT、UPDATE、DELETE

DDL

  • ALTER TABLE、ALTER VIEW

  • CREATE FUNCTION、CREATE INDEX、CREATE PROCEDURE、CREATE TABLE、CREATE VIEW

  • DROP INDEX、DROP TABLE、DROP FUNCTION、DROP PROCEDURE

  • RENAME TABLE

  • TRUNCATE TABLE

数据库账号最小权限策略

数据库结构迁移全量迁移增量迁移

源库

SELECT 权限

SELECT 权限

REPLICATION SLAVEREPLICATION CLIENTSELECT 权限。

目标库读写权限读写权限读写权限

操作步骤

  1. 登录 DTS 控制台

  2. 在顶部菜单栏,选择项目和地域。

  3. 在左侧导航栏,单击数据迁移

  4. 迁移任务列表页面,单击创建任务

  1. 创建迁移任务页面的配置源库及目标库配置向导页面,配置以下参数信息。

    类别参数说明

    任务名称

    (可选)自定义迁移任务名称。命名规则如下:

    • 以字母开头。

    • 长度需在 64 个字符内。

    • 只能包含字母、数字、下划线(_)和中划线(-)。

    链路规格

    按需选择迁移任务的链路规格,当前支持 CompactStandard

    说明

    成功创建任务后,不支持修改任务的链路规格。关于链路规格的详细信息,请参见产品规格

    源库配置

    选择已有数据源

    您可以按需选择是否使用已录入的实例:

    • 使用已录入实例:单击选择已有数据源,在选择数据源控制面板,从地域下拉列表中选择目标地域,然后选择目标数据源。支持通过数据源名称和 ID 选择数据源。关于数据源的创建方法,请参见数据源管理

    • 不使用已录入实例:如果不使用已录入的实例,那么您需要配置以下数据库实例信息。

    实例类型选择 MySQL

    接入方式

    选择公网自建 MySQL

    说明

    在迁移公网自建 MySQL 实例时,您需要提前在源端的白名单或安全组策略中,添加 DTS IP 段的访问权限。单击查看 DTS IP 段查看和复制 IP 段。

    地域选择目标实例所属地域。
    主机地址输入目标库自建实例的主机地址。
    端口输入目标自建实例的端口号。
    数据库账号输入目标实例的数据库账号。
    数据库密码输入目标实例数据库账号对应的密码。

    连接方式

    按需选择非加密连接SSL 安全连接,建立更加安全可靠的迁移链路。

    说明

    • 当选择 SSL 安全连接时,您需提前开通公网自建 MySQL 实例的 SSL 加密功能。

    • 当迁移任务选择非加密连接且任务正常运行时,开通了公网自建 MySQL 实例的 SSL 加密功能可能会导致非加密任务失败。

    SSL 加密证书单击上传 SSL 加密证书上传 CA 证书。当连接方式选择了 SSL 安全连接时,支持该配置。

    测试链接

    单击测试链接,验证是否成功连接实例。
    当测试连接失败时,根据失败提示信息修改相关配置后,再次单击测试连接,验证是否可以成功连接实例。具体提示信息如下:

    • 连接认证失败,请检查网络是否正常:当出现该报错提示时,请确认网络的连通性。

    • 连接认证失败,请检查用户名和密码是否正确:当出现该报错提示时,您需要确认用户名和密码的准确性。

    • 无效的 IP 地址:当出现该报错提示时,请确认 IP 地址的正确性。

    目标库配置

    选择已有数据源

    您可以按需选择是否使用已录入的实例:

    • 使用已录入实例:单击选择已有数据源,在选择数据源控制面板,从地域下拉列表中选择目标地域,然后选择目标数据源。支持通过数据源名称和 ID 选择数据源。关于数据源的创建方法,请参见数据源管理

    • 不使用已录入实例:如果不使用已录入的实例,那么您需要配置以下数据库实例信息。

    实例类型

    选择 MySQL

    接入方式选择火山引擎版 MySQL
    地域选择目标实例所属地域。

    MySQL 实例

    在下拉列表中选择云数据库版 MySQL 的目标实例。

    说明

    下拉列表中仅展示前 10 个实例。您也可以通过实例 ID 或名称搜索目标实例。

    数据库账号输入目标实例的数据库账号。
    数据库密码输入目标实例数据库账号对应的密码。

    测试链接

    单击测试链接,验证是否成功连接实例。
    当测试连接失败时,根据失败提示信息修改相关配置后,再次单击测试连接,验证是否可以成功连接实例。具体提示信息如下:

    • 连接认证失败,请检查用户名和密码是否正确:当出现该报错提示时,您需要确认用户名和密码的准确性。

    • 连接认证失败,无法正常创建连接, 请联系客服:当出现该报错提示时,请提交工单联系技术支持。

    项目

    (可选)从下拉列表中选择该任务所属项目,默认在 default(默认项目) 下。您也可以单击创建新项目,创建新的项目。详细操作,请参见新建项目

    说明

    • 关于如何授予子用户访问指定项目下资源的权限操作步骤,请参见修改项目权限

    • 成功创建任务后,如果需要修改实例的所属项目,例如将任务从当前项目移入至其他项目,您可以将资源移入指定项目。详细操作,请参见资源移入项目

    • 项目是一个虚拟的概念,包括一组资源、用户和角色。通过项目可以对一组资源进行统一的查看和管理,并且控制项目内用户和角色对这些资源的权限。

    标签

    (可选)单击添加标签,为实例添加标签,标签可帮您实现云资源的分类、云资源的访问控制、账单与成本分摊等。标签由一个键值对(Key-Value)组成,用于标识云资源,可以帮助您从不同维度(例如用途、所有者等)对具有相同特征的云资源进行分类,便于筛选和聚合,从而轻松管理云上资源。关于标签的详细信息,请参见标签概述。标签的键值对规则如下:

      • 支持任何语言、文字、数字、空格或符号(_.:/=+-@)。

      • 大小写敏感,且长度在 1~128 个字符内。

      • 使用 UTF-8 编码的 Unicode 格式。

      • 不支持设置以 volc: 开头的任何形式的 Key,例如 Volc:VOLC: 等。

    • (可选)值

      • 支持任何语言、文字、数字、空格或符号(_.:/=+-@)。

      • 大小写敏感,且长度在 0~256 个字符内。

      • 使用 UTF-8 编码的 Unicode 格式。

    说明

    • 单次最多可给任务绑定 20 个标签。单个任务最多可绑定 50 个标签。

    • 同一个资源拥有的标签 Key 不可重复,且一个标签 Key 只有一个值 Value。

    计费方式

    当前仅支持按量计费,您无需选择。

    说明

    关于计费的详细信息,请参见计费说明

  2. 单击下一步:配置迁移对象

  3. 配置迁移对象配置向导页面,配置相关参数信息,如下表所示。

    说明

    • 若暂时不需要启动迁移任务,您可以在完成迁移对象配置后,单击页面右下角的保存

    • 保存后会跳转回迁移任务列表页,此时任务状态为待启动,您可以在合适的时候再配置迁移任务。配置方法,请参见配置迁移任务

    参数说明

    迁移类型

    按需选择迁移类型,当前支持用户迁移结构迁移全量迁移增量迁移。其中:

    • 若仅需要全量迁移,可同时勾选结构迁移全量迁移

    • 若需要进行不停机迁移,可以同时勾选结构迁移全量迁移增量迁移

    • 若需要将源库中指定的非系统账号及账号所拥有的权限迁移到目标库,可以勾选用户迁移

    说明

    • 当只勾选全量迁移时,成功创建任务后,可以在任务详情页签查看全量迁移的具体截止 GtidSet(含),表示该 GtidSet 前所有的数据均被迁移至目标库,该 GtidSet 点后源库有变动的数据将不会迁移至目标库。

    • 若未勾选增量迁移,数据迁移期间请勿在源库实例中写入新的数据,以确保数据的一致性。

    • 若需要进行用户迁移,用户和权限的迁移需要单独处理。当出现源数据库部分账号不支持迁移时,需先确保业务不受这些账号的缺失而影响运行。

    迁移用户

    按需勾选目标账号,在目标账号的新密码(选填) 列设置新密码。当需迁移多个用户时,可单击批量修改密码,统一修改需要迁移的账号密码,若不修改则目标库账号密码和源库密码一致。

    说明

    迁移类型选择用户迁移时,支持此配置。

    迁移起始点

    设置从某个指定位点或时间点拉取 Binlog 日志,取值如下:

    • 系统默认:默认为当前时间点。
    • 指定 GTID:在输入框内输入指定的 GTID,格式为 source_id:transaction_id
    • 指定 GTID_EXECUTED:在输入框内输入指定的 GTID_EXECUTED,格式为 source_id:transaction_id,当存在多个时,可使用英文逗号(,)隔开。关于如何获取实例的 GTID_EXECUTED,请参见如何获取实例的 GTID_EXECUTED
    • 指定时间戳:单击输入框,选择日期,单击选择时间设置时间点,然后单击确定

    说明

    • 迁移类型勾选增量迁移时,支持此配置。
    • 迁移类型同时勾选了全量迁移增量迁移时,默认在当前时间点进行迁移。
    • GTID、GTID_EXECUTED 必须是源端合法的值,否则预检查时会报错。
    • 当选择指定时间戳时,您设置的时间必须要晚于源端 Binlog 的最早时间。当没有对应时间 Binlog 时,则选取最接近 Binlog 的起点。
    是否开启外键检查按需选择是否开启外键检查,开启外键检查后,支持迁移源库的外键级联更新、删除等操作,从而保证数据迁移的完整性和一致性。

    迁移对象

    迁移对象区域中勾选需要迁移的对象,支持通过普通搜索全局搜索方式查询目标对象。同时,您可以在已选择对象区域中实现以下操作:

    • 重命名库或表:单击目标库、表和视图后的笔状图标,重命名库、表和视图。如果在迁移对象区域勾选了整库,则在已选择对象区域仅支持修改库名,且不支持展开该数据库。
    • 筛选删除不需要的目标:在已选择对象区域的搜索框内支持模糊搜索,批量删除不需要的数据库、表等目标。
    • 过滤表内数据:勾选过滤数据,可以实现对表内数据的过滤。

    说明

    • 迁移对象已选择对象区域支持通过正则表达式搜索目标对象。

    • 迁移对象非整库时,不支持 OnlineDDL 操作,且增量迁移不支持自动迁移新增的对象及其相关变更。

    • 迁移对象选择的粒度为库或表。若迁移对象选择的是表,则其他对象例如视图、触发器、函数或存储过程等,不会被迁移至目标库。

    • 为保证数据迁移的性能和迁移任务的稳定性,云数据库版 MySQL 的 TRIGGER 和 EVENT 会在增量迁移结束后才进行迁移。

    过滤条件

    (可选)在开启过滤条件时,可以在全量数据扫描阶段即开始过滤数据,进而提高迁移性能,您可以在目标库、表或视图的过滤条件列,单击笔状图标,设置过滤条件,然后单击校验语句,验证是否满足过滤条件。

    说明

    • 该功能当前属于邀测阶段,如需使用可提交工单联系技术支持。
    • 迁移对象的库、表或视图勾选了过滤数据,才支持配置此字段。
    • 过滤条件当前支持=!=<><=>=inis nullandor操作符。
    错误重试时间在迁移任务中,当源库和目标库断连后导致迁移任务失败时,会立即在指定时间内多次重试连接源库和目标库。取值范围:600~86400,单位:秒(s)。默认值为 600 秒。

    全量迁移速率

    按需设置全量迁移速率。防止在迁移速率过高时,影响源库的性能,您可以根据源库和目标库的读写压力情况适当调整以下参数:

    • 每秒迁移的行数:按需开启并设置每秒迁移的行数。默认值 100000,取值范围 1~100000。
    • 每秒迁移的数据量:按需开启并设置每秒迁移的数据量。默认值 25000,取值范围 1~25000,单位 KB。
    • 迁移任务并发数:按需设置迁移任务的并发数。默认值 8,取值范围 8~64。

    说明

    • 迁移类型选择全量迁移时,支持配置该参数。
    • 如果您申请了开启 DTS 的全增一体功能,那么将不支持单独设置任务的迁移任务并发数。如需开启 DTS 的全增一体功能,请提交工单联系技术支持。
  1. 单击预检查

  2. (可选)当创建的任务已有预检查时,您可以根据以下提示确认是否重新发起预检查,当需要重新发起预检查时,请在是否重新发起预检查对话框,单击确定

    • 若源端和目标端的数据库实例未做修改,则无需再次发起预检查。

    • 如果修改了源端、目标端的数据库实例信息或迁移任务的参数配置,那么建议您重新发起预检查,否则可能会导致任务启动失败或者任务中断。

  3. 预检查配置向导页面,根据检查结果执行以下操作:

    • 单击预检查结果操作列的详情,查看详细的告警和失败信息,并根据告警或失败信息修改库表后,单击重试

    • 单击操作列的忽略,忽略本次告警继续启动迁移任务。同时,也可以单击忽略全部,一键忽略全部告警信息。

    说明

    • 选择忽略告警并启动迁移任务,可能导致数据不一致,带来业务风险。

    • 关于预检查的具体说明,请参见预检查项

  4. 预检查页面右下角,单击确认订单

  5. 确认订单配置向导页面,再次确认配置信息。阅读《数据库产品和服务条款》并勾选我已阅读并同意《数据库产品和服务条款》,然后单击创建并启动任务

成功创建数据迁移任务后,您可以返回数据库传输服务 DTS 控制台,在数据迁移任务列表查看数据迁移任务的信息。更多信息,请参见查看迁移任务

相关 API

API描述
CreateTransmissionTask调用 CreateTransmissionTask 接口创建数据库传输服务任务。
ModifyTransmissionTask调用 ModifyTransmissionTask 接口修改传输任务。