使用DTS实现MySQL数据拆分
1. 概览
业务在长期运行过程中,由于最初表结构设计的不合理或是数据量日渐增长,有可能面临将一张原始表拆分为多张表的数据拆分需求。通过DTS实时迁移任务以及库表列名映射与行列过滤功能,您只需要秒级停机时间即可轻松完成库表的在线拆分。
2. 需求场景1:将表中数据纵向拆分
将一张表中的不同列分别拆到不同表中,称为数据的纵向拆分。在纵向拆分时,通常每张分表都保留原表中的主键字段(图例中 Table1 的主键字段为 ID ),以便业务进行关联查询。
2.1. 方案概述
如下图所示,您可以通过建立两个DTS拆分任务,分别配置不同的表名映射规则和列过滤规则,来将一张表中的数据分别同步到拆分后的两张分表。
2.2. 操作步骤
前置准备
- 在目标数据库中使用 CREATE TABLE 语句建立两张拆分后的表( Table1_1 和 Table1_2 )的表结构(DTS任务当前仅支持对存量数据和增量数据进行拆分,暂不支持在结构迁移时进行拆分)。
例如,原始表Table1的建表语句为:
CREATE TABLE `Table1` (
`ID` int NOT NULL,
`A` varchar(100) DEFAULT NULL,
`B` int DEFAULT NULL,
`C` varchar(100) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
则您需要先在目标数据库中使用如下建表语句建出拆分后的新表 Table1_1 和 Table1_2:
CREATE TABLE `Table1_1` (
`ID` int NOT NULL,
`A` varchar(100) DEFAULT NULL,
`B` int DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `Table1_2` (
`ID` int NOT NULL,
`C` varchar(100) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
配置数据拆分使用的DTS任务
- 登录 DTS 控制台。
- 创建一个DTS任务 DTS拆分任务1,配置源库及目标库信息,进入下一步。
- 在任务配置页的迁移类型中勾选全量迁移和增量同步(Table1_1 表结构已提前建好,无需结构迁移)。由于在线数据拆分的源端和目标端数据库经常为线上业务使用的数据库,为了不在全量迁移时对数据库造成过大压力,推荐您开启限制传输速度的选项并对全量迁移阶段设置合理的限速。
- 配置 任务1 的对象映射规则。在 "传输对象" 选项中选 "手动选择",展开左侧迁移对象下拉列表,在列表中勾选待拆分的表 Table1,点击右侧 Table1 后方的 "编辑" 按钮。
在弹出的编译窗口中,将表名称修改为 Table1_1,并在 "列过滤(黑名单)" 中填写字段 C。点击右下角确认。
可以看到右侧原本的 Table1 对象名称已经变为 Table1_1(下方会显示原表名)。
-
上述配置完成后,点击页面下方的 保存并预检查。
说明
- 在迁移任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动迁移任务。
- 如果预检查失败,请查看失败检查项的提示,并根据提示修复后重新进行预检查。
-
如果预检查产生警告:
- 对于不可以忽略的检查项,请查看失败检查项的提示,并根据提示修复后重新进行预检查。
- 对于可以忽略无需修复的检查项,您可以点击 强制通过,在弹出的窗口中勾选风险确认信息并点击 确定,跳过告警检查项重新进行预检查。如果选择屏蔽告警检查项,可能会导致数据不一致等问题,给业务带来风险。
- 前置校验提示校验成功后,点击 立即开启任务,启动 DTS拆分任务1。
- 创建另一个DTS任务 DTS拆分任务2,参考上述步骤2-3完成数据源、迁移类型和迁移限速的配置。
- 配置 任务2 的对象映射规则。在“传输对象”选项中选“手动选择”,展开左侧迁移对象下拉列表,在列表中勾选待拆分的表 Table1,点击右侧 Table1 后方的 "编辑" 按钮。
在弹出的编译窗口中,将表名称修改为 Table1_2,并在“列过滤(白名单)”中填写字段 ID,C。点击右下角确认。
可以看到右侧原本的 Table1 对象名称已经变为 Table1_2(下方会显示原表名)。
- 参考上述步骤5-6,完成 任务2 的预检查并启动。
- 在DTS任务列表页可以看到 任务1 和 任务2 的当前进度,等待两个任务都进入 "复制变更" 且延迟为0秒时,即可发起业务切换的操作。
数据校验
在DTS任务到达增量同步无延迟状态时,您可以通过数据校验功能检查两端数据的一致性。可以点击列表页任务后方的 "数据校验" ,发起数据校验操作:
由于数据校验对源端及目标端数据库会产生一定的压力,因此推荐您在进行在线数据拆分时调低并发度,避免数据库过载。
数据校验的结果会展示在任务列表页,如校验结果显示 "一致",说明业务已经随时可以进行切换:
注意:由于DTS数据校验不支持无主键表、仅对有主键的表进行校验,且DTS迁移任务无法保证无主键表的数据一致性,因此校验结果显示 "一致" 时仍然有可能有部分无主键表的数据存在不一致的情况,需要业务对此类情况自行处理。
业务切换
详情参见 业务切换流程。