tencent cloud

文档反馈

TDSQL MySQL 迁移至 TDSQL MySQL

最后更新时间:2024-07-08 19:43:33
    本文介绍使用 DTS 数据迁移功能,从 TDSQL MySQL 迁移数据至腾讯云分布式数据库 TDSQL MySQL 的操作指导。
    如下场景的迁移要求与 TDSQL MySQL 到 TDSQL MySQL 的迁移要求一致,可参考本场景相关内容。
    TDSQL MySQL 到腾讯云数据库 MariaDB 的数据迁移
    TDSQL MySQL 到腾讯云数据库 MySQL 的数据迁移

    注意事项

    DTS 在执行全量数据迁移时,会占用一定源端实例资源可能会导致源实例负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行。
    默认采用无锁迁移来实现,迁移过程中对源库不加全局锁(FTWRL),仅对无主键的表加表锁,其他不加锁。
    创建数据一致性校验 时,DTS 会使用执行迁移任务的账号在源库中写入系统库__tencentdb__,用于记录迁移任务过程中的数据对比信息。
    为保证后续数据对比问题可定位,迁移任务结束后不会删除源库中的__tencentdb__
    __tencentdb__系统库占用空间非常小,约为源库存储空间的千分之一到万分之一(例如源库为50GB,则__tencentdb__系统库约为5MB - 50MB),并且采用单线程,等待连接机制,所以对源库的性能几乎无影响,也不会抢占资源。

    前提条件

    源数据库和目标数据库符合迁移功能和版本要求,请参见 数据迁移支持的数据库 进行核对。
    已完成 准备工作
    需要您在源端 TDSQL MySQL 中提前创建好数据库:__tencentdb__
    需要具备源数据库的权限。
    CREATE USER '迁移帐号'@'%' IDENTIFIED BY '迁移密码';
    GRANT SELECT,RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHOW VIEW,PROCESS ON *.* TO '迁移帐号'@'%';
    //源端若为腾讯云 TDSQL MySQL 数据库,需要提交工单进行 RELOAD 授权,其他场景请用户参照代码授权
    GRANT INSERT, UPDATE, DELETE, DROP, SELECT, INDEX, ALTER, CREATE ON `__tencentdb__`.* TO '迁移帐号'@'%';
    需要具备目标数据库的权限:ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, PROCESS, REFERENCES, RELOAD, SELECT, SHOW DATABASES, SHOW VIEW, TRIGGER, UPDATE。

    应用限制

    只支持迁移基础表,不支持迁移视图、函数、触发器、存储过程等对象。
    不支持迁移系统库表和用户信息,包括 information_schemasysdbtestsysperformance_schema__tencentdb__mysql
    只支持迁移 InnoDB 数据库引擎,如果存在其他的数据引擎表则默认跳过不进行迁移。
    相互关联的数据对象需要同时迁移,否则会导致迁移失败。
    增量迁移过程中,若源库产生了类型为 STATEMENT 格式的 Binlog 语句,则会导致迁移失败。
    不支持迁移 二级分区 表。
    TDSQL MySQL 迁移到 MySQL/MariaDB,遇到二级分区表的迁移,任务报错。
    TDSQL MySQL 迁移到 TDSQL MySQL,如果迁移的库表中包含二级分区表,存量数据会跳过二级分区表的迁移;如果选择整库或全实例迁移,增量过程中遇到二级分区表任务报错暂停。
    不支持同时包含 DML 和 DDL 语句在一个事务的场景,遇到该情况任务会报错。
    不支持 Geometry 相关的数据类型,遇到该类型数据任务报错。

    操作限制

    迁移过程中请勿进行如下操作,否则会导致迁移任务失败。
    请勿修改、删除源数据库和目标数据库中用户信息(包括用户名、密码和权限)和端口号。
    请勿在源库写入 Binlog 格式为 STATEMENT 的数据。
    请勿在源库上执行清除 Binlog 的操作。
    在增量迁移阶段,请勿删除系统库表 __tencentdb__
    如果仅执行全量数据迁移,请勿在迁移过程中向源实例中写入新的数据,否则会导致源和目标数据不一致。针对有数据写入的场景,为实时保持数据一致性,建议选择全量 + 增量数据迁移。
    增量迁移过程中,不支持源库新增分片、调整分片规格,否则迁移任务不会同步新增分片的数据或是任务报错暂停,如果需要长期保持增量同步并且支持源库的新增分片、调整分片操作,请使用 TDSQL 数据同步 来进行同步。

    支持的 SQL 操作

    操作类型
    支持同步的 SQL 操作
    DML
    INSERT、UPDATE、DELETE、REPLACE
    DDL
    TABLE:CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE
    VIEW:CREATE VIEW、DROP VIEW
    INDEX:CREATE INDEX、DROP INDEX
    DATABASE:CREATE DATABASE、ALTER DATABASE、DROP DATABASE
    暂不支持 CREATE TABLE 表名 AS SELECT 语句。

    环境要求

    说明
    如下环境要求,系统会在启动迁移任务前自动进行校验,不符合要求的系统会报错。如果用户能够识别出来,可以参考 校验项检查要求 自行修改,如果不能则等系统校验完成,按照报错提示修改。
    类型
    环境要求
    源数据库要求
    源库和目标库网络能够连通。
    实例参数要求:
    table_row_format 不能设置为 FIXED。
    源库和目标库 lower_case_table_names 变量必须设置一致。
    检查目标端 max_allowed_packet 参数,至少设置 4M。
    源库变量 connect_timeout 设置数值必须大于10。
    Binlog参数要求:
    源端 binlog_format 变量必须设置为 ROW。
    源端 log_bin 变量必须设置为 ON。
    源端 binlog_row_image 变量必须设置为 FULL。
    源端 gtid_mode 变量在5.6及以上版本不为 ON 时,会报 WARNING,建议用户打开 gtid_mode。
    不允许设置 do_db, ignore_db。
    对于源实例为从库的情况,log_slave_updates 变量必须设置为 ON。
    建议源库 Binlog 日志至少保留3天及以上,否则可能会因任务暂停/中断时间大于 Binlog 日志保留时间,造成任务无法续传,进而导致任务失败。
    外键依赖:
    外键依赖只能设置为 no action 和 restrict 两种类型。
    部分库表迁移时,有外键依赖的表必须齐全。
    环境变量 innodb_stats_on_metadata 必须设置为 OFF。
    目标数据库要求
    目标库为分布式数据库时,推荐提前手动创建分表,并规划 shardkey,否则 DTS 会按照源库的表样式来在目标库创建表,如果源库为单机实例,则目标库会创建为单表。
    目标库的版本必须大于等于源库的版本。
    目标库的空间大小须是源库待迁移库表空间的1.2倍以上。
    目标库不能有和源库冲突的库表。

    操作步骤

    1. 登录 DTS 控制台,在左侧导航选择数据迁移页,单击新建迁移任务,进入新建迁移任务页面。
    2. 在新建迁移任务页面,选择迁移的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买
    配置项
    说明
    源实例类型
    请根据您的源数据库类型选择,购买后不可修改。本场景选择“TDSQL MySQL”。
    云数据库 TDSQL MySQL 分为三种内核版本(MySQL/MariaDB/Percona),这里无需区分内核版本,选择本身的数据库类型 TDSQL MySQL。
    源实例地域
    选择源数据库所属地域。
    目标实例类型
    请根据您的目标数据库类型选择,购买后不可修改。本场景选择“TDSQL MySQL”。
    目标实例地域
    选择目标数据库所属地域。
    规格
    根据业务情况选择迁移链路的规格,不同规格的性能和计费详情请参考 计费概述
    3. 在设置源和目标数据库页面,完成任务设置、源库设置和目标库设置,测试源库和目标库连通性通过后,单击新建
    说明
    如果连通性测试失败,请根据提示和 修复指导 进行排查和解决,然后再次重试。
    设置类型
    配置项
    说明
    任务设置
    任务名称
    设置一个具有业务意义的名称,便于任务识别。
    运行模式
    支持立即执行和定时执行:立即执行,则完成任务校验通过后立即启动任务;定时执行,需要配置一个任务执行时间则到时间后启动任务。
    标签
    标签用于从不同维度对资源分类管理。如现有标签不符合您的要求,请前往控制台管理标签。
    源库设置
    源库类型
    购买时选择的源库类型,不可修改。
    所属地域
    购买时选择的源库地域,不可修改。
    接入类型
    选择“云数据库”。
    数据库实例
    选择源数据库实例 ID。
    帐号
    源库 TDSQL MySQL 的数据库帐号,帐号权限需要满足要求。
    密码
    源库 TDSQL MySQL 的数据库帐号的密码。
    目标库设置
    目标库类型
    购买时选择的目标库类型,不可修改。
    所属地域
    购买时选择的目标库地域,不可修改。
    接入类型
    选择“云数据库”。
    数据库实例
    选择目标端 TDSQL MySQL 实例 ID。
    帐号
    目标端 TDSQL MySQL 的数据库帐号,帐号权限需要满足要求。
    密码
    目标端 TDSQL MySQL 的数据库帐号的密码。
    4. 在设置迁移选项及选择迁移对象页面,设置迁移类型、对象,单击保存
    说明
    如果用户在迁移过程中确定会使用 gh-ost、pt-osc 等工具对某张表做 Online DDL,则迁移对象需要选择这个表所在的整个库(或者整个实例),不能仅选择这个表,否则无法迁移 Online DDL 变更产生的临时表数据到目标数据库。
    如果用户在迁移过程中确定会对某张表使用 rename 操作(例如将 table A rename 为 table B),则迁移对象需要选择 table A 所在的整个库(或者整个实例),不能仅选择 table A,否则 rename 操作后,table B 的数据不会同步到目标库。
    
    配置项
    说明
    迁移类型
    请根据您的场景选择。
    结构迁移:迁移数据库中的库、表等结构化的数据。
    全量迁移:迁移整个数据库,迁移数据仅针对任务发起时,源数据库已有的内容,不包括任务发起后源库实时新增的数据写入。
    全量 + 增量迁移:迁移数据包括任务发起时源库的已有内容,也包括任务发起后源库实时新增的数据写入。如果迁移过程中源库有数据写入,需要不停机平滑迁移,请选择此场景。
    迁移对象
    整个实例:迁移整个实例,但不包括系统库,如information_schema、mysql、performance_schema、sys。
    指定对象:迁移指定对象。
    指定对象
    在源库对象中选择待迁移的对象,然后将其移到已选对象框中。
    5. 在校验任务页面,进行校验,校验任务通过后,单击启动任务。 如果校验任务不通过,可以参考 校验不通过处理方法 修复问题后重新发起校验任务。
    失败:表示校验项检查未通过,任务阻断,需要修复问题后重新执行校验任务。
    警告:表示检验项检查不完全符合要求,可以继续任务,但对业务有一定的影响,用户需要根据提示自行评估是忽略警告项还是修复问题再继续。
    6. 返回数据迁移任务列表,任务进入创建中状态,运行1分钟 - 2分钟后,数据迁移任务开始正式启动。
    选择结构迁移或者全量迁移:任务完成后会自动结束,不需要手动结束。
    选择全量 + 增量迁移:全量迁移完成后会自动进入增量数据同步阶段,增量数据同步不会自动结束,需要您手动单击完成结束增量数据同步。
    请选择合适时间手动完成增量数据同步,并完成业务切换。
    观察迁移阶段为增量同步,并显示无延迟状态,将源库停写几分钟。
    目标与源库数据差距为0MB及目标与源库时间延迟为0秒时,手动完成增量同步。
    7. (可选)如果您需要进行查看任务、删除任务等操作,请单击对应的任务,在操作列进行操作,详情可参考 任务管理
    8. 当迁移任务状态变为任务成功时,即可对业务进行正式割接,更多详情可参考 割接说明
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持