-
使用流程 一次完整的实时迁移,是通过创建实时迁移任务,以迁移任务作为数据库迁移的导向,依次进行迁移进度观察、迁移
日志分析 、迁移数据一致性对比等多项操作。通过多项指标和数据的对比分析,可以帮助您确定合适的业务割接时机,实现最小化业务中断的数据库迁移。 一次完整的实时迁移包含如下过程: 图1 迁移流程 步骤一:创建迁移任务。根据需要,选择源和目标数据库,创建迁移任务。 步骤二:查询迁移进度。迁移过程中,可以通过查看迁移进度了解数据迁移完成情况。 步骤三:查看迁移日志。迁移日志包含告警、错误和提示等类型的信息,可根据此类信息分析系统存在的问题。 步骤四:对比迁移项。数据迁移提供对比功能,可根据需要查看对象级对比、数据级对比等,来确保源和目标数据库的数据一致性。 本章节将以MySQL到RDS for MySQL的迁移为示例,介绍在VPC网络场景下,通过
数据复制服务 管理控制台配置数据迁移任务的流程,其他存储引擎的配置流程类似。 VPC网络适合云上同Region数据库之间的迁移。 在数据复制服务中,数据库迁移是通过任务的形式完成的,通过创建任务向导,可以完成任务信息配置、任务创建。迁移任务创建成功后,您也可以通过数据复制服务管理控制台,对任务进行管理。
-
数据修复(公测中) 当静态内容对比结果中存在不一致数据时,可在对比报表的明细页中选取不一致的表进行数据修复。数据修复结果为可在目标库执行的修复SQL。修复完成后可在对比报表的修复进度明细页查看不一致行的修复SQL生成详情,也可导出和下载针对本次对比所有已生成的不一致SQL,并结合实际情况在目标库手动执行修复SQL。数据修复具有如下约束。 数据修复功能仅支持白名单用户使用,当前支持MYSQL-MYSQL链路、
GaussDB 分布式版-GaussDB(DWS)链路。 对于修复SQL为INSERT或UPDATE语句的场景,修复SQL中将展示不一致行的所有列内容,列值为对应列在源库的当前值。 历史的比对任务可能由于缺少修复信息而修复失败,需要重新比对后再进行修复。 每个同步任务仅保留最新一次数据修复的修复进度明细信息页面。 单个不一致行的数据大小最大支持4M,超过时对应的修复SQL将生成失败。 DRS生成的修复SQL中,时间类型字段的内容是基于UTC时间的,如果表中存在时间字段,目标库执行修复SQL前需先将会话时区设置为0时区。各数据库类型对应的会话时区设置SQL示例如下表。 请谨慎执行修复SQL中的DELETE语句。 表2 各数据库类型设置会话时区为0时区的SQL示例 数据库类型 时区设置SQL MYSQL SET session time_zone='+00:00';
-
对数据库影响 对象对比:会查询源库及目标库的系统表,占用10个左右的session的连接数,正常情况不会对数据库产生影响。但是如果对象数量巨大(比如几十万张表),可能会对数据库产生一定的查询压力。 行数对比:会查询源库及目标库的表行数,占用10个左右的session的连接数,正常的select count语句基本不会对数据库产生影响。但是如果表数据量巨大(亿级)会对数据库产生一定的查询压力,返回查询结果会比较慢。 内容对比:会查询源库及目标库的全部数据,涉及每个字段都会对比,所以会对数据库产生一定的查询压力,主要体现在IO上,查询速度受限于源库和目标库的IO和网络带宽。占用1-2个CPU,占用10个左右的session的连接数。 用户对比:会查询源库及目标库的账户和权限,基本不会对数据库产生影响。
-
响应示例 获取任务信息成功。 {
"job" : {
"id" : "5cbb8a90-2253-4cff-8a13-49aa8f31dfb5",
"name" : "CreateGaussDBV5Instance",
"status" : "Completed",
"created" : "2021-07-12T09:22:04+0800",
"ended" : "2021-07-12T10:10:13+0800",
"progress" : "",
"instance" : {
"id" : "b34f8c791f2643578510c093aa2351a8in14",
"name" : "gauss-c1a3"
},
"fail_reason" : null
}
}
-
URI GET https://{Endpoint}/v3/{project_id}/jobs?id={id} 表1 请求参数 名称 类型 是否必选 描述 project_id String 是 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 id String 是 参数解释: 任务ID。支持通过API接口(除“应用参数模板”、“创建手动备份”以外的)返回的异步任务ID查询任务结果。 约束限制: 不涉及 取值范围: UUID形式。 默认取值: 不涉及。
-
响应参数 表2 参数说明 名称 参数类型 描述 job Object 参数解释: 任务信息,请参见表job字段数据结构说明。 表3 job字段数据结构说明 名称 参数类型 描述 id String 参数解释: 任务ID。 取值范围: UUID形式。 name String 参数解释: 任务名称。 取值范围: 不涉及。 status String 参数解释: 任务执行状态。 取值范围: 值为“Running”,表示任务正在执行。 值为“Completed”,表示任务执行成功。 值为“Failed”,表示任务执行失败。 created String 参数解释: 创建时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。示例2021-07-12T09:22:04+0800。 取值范围: 不涉及。 ended String 参数解释: 结束时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。示例2021-07-12T09:22:04+0800。 取值范围: 不涉及。 progress String 参数解释: 任务执行进度。 执行中状态才返回执行进度,例如“60%”,表示任务执行进度为60%,否则返回“”。 取值范围: 不涉及。 instance Object 参数解释: 执行任务的实例信息。 请参见表4。 fail_reason String 参数解释: 任务执行失败时的错误信息。 取值范围: 不涉及。 表4 instance字段数据结构说明 名称 参数类型 描述 id String 参数解释: 实例ID。标识实例的唯一标识。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 name String 参数解释: 实例名称。 取值范围: 实例名称长度在4个到64个字符之间,以字母开头,可以包含字母、数字、中划线或下划线,不能包含其他特殊字符。
-
响应示例 状态码:200 响应Body参数 {
"job_id" : "26f6b565-xxxx-XXXX-xxxx-03f0bd975433",
"status" : "success",
"job_type" : "bind_ldap",
"begin_time" : "2023-07-26 09:33:58",
"end_time" : "2023-07-26 09:33:58"
} 状态码:400 客户端错误 {
"errCode" : "SFS.TURBO.0001",
"errMsg" : "parameter error"
} 状态码:404 资源不存在 {
"errCode" : "SFS.TURBO.0001",
"errMsg" : "parameter error"
} 状态码:500 内部错误 {
"errCode" : "SFS.TURBO.0005",
"errMsg" : "Internal server error"
}
-
响应参数 状态码:200 表3 响应Header参数 参数 参数类型 描述 X-request-id String 请求ID 表4 响应Body参数 参数 参数类型 描述 status String job的状态。success:成功。running:运行中。failed:失败。waiting:等待执行。 枚举值: success failed waiting running job_id String job的ID。 job_type String job的类型。 begin_time String job开始时间。UTC时间,格式:'2016-01-02 15:04:05'。 end_time String job结束时间。UTC时间,格式:'2016-01-02 15:04:05'。 error_code String job执行失败时的错误码。 fail_reason String job执行失败时的错误原因。 sub_jobs Array of GetSubJobDetail objects 子任务列表。 表5 GetSubJobDetail 参数 参数类型 描述 status String 子任务的状态。success:成功。running:运行中。failed:失败。waiting:等待执行。 job_id String 子任务的ID。 job_type String 子任务的类型。 begin_time String 子任务开始时间。UTC时间,格式:'2016-01-02 15:04:05' end_time String 子任务结束时间。UTC时间,格式:'2016-01-02 15:04:05' error_code String 子任务执行失败时的错误码 fail_reason String 子任务执行失败时的错误原因 状态码:400 表6 响应Header参数 参数 参数类型 描述 X-request-id String 请求ID 表7 响应Body参数 参数 参数类型 描述 errCode String 错误码 errMsg String 错误描述 状态码:404 表8 响应Header参数 参数 参数类型 描述 X-request-id String 请求ID 表9 响应Body参数 参数 参数类型 描述 errCode String 错误码 errMsg String 错误描述 状态码:500 表10 响应Header参数 参数 参数类型 描述 X-request-id String 请求ID 表11 响应Body参数 参数 参数类型 描述 errCode String 错误码 errMsg String 错误描述
-
响应示例 状态码: 200 OK {
"count" : 1,
"tasks" : [ {
"task_id" : "1",
"process" : "convertToUpper",
"tag" : "\"process_tag\"",
"hash" : "45/39c703",
"status" : "COMPLETED",
"container" : "127.0.0.1:8080/hwofficial/coredns:1.23.2",
"pod_name" : "nf-322decb1e97bfcaba3b6672b73551206",
"submit" : 1675756197305,
"complete" : 1675756199000,
"duration" : 1695,
"realtime" : 82,
"cpu_percent" : 42.0,
"mem_percent" : 32.0
} ]
}
-
响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 tasks Array of NextflowTaskListDto objects 子任务实例 count Integer 子任务的总数 表5 NextflowTaskListDto 参数 参数类型 描述 task_id String 子任务id process String 流程名称 tag String 子任务标识符 hash String 哈希值 status String 子任务状态 container String 容器名称 pod_name String pod名称 submit String 提交时间 complete String 完成时间 duration Long 总时间 realtime Long 实际运行时间 cpu_percent Double cpu使用率 mem_percent Double 内存使用率
-
URI GET /v1/{project_id}/eihealth-projects/{eihealth_project_id}/nextflow/jobs/{job_id}/tasks 表1 路径参数 参数 是否必选 参数类型 描述 eihealth_project_id 是 String 平台项目ID,您可以在平台单击所需的项目名称,进入项目设置页面查看。 最小长度:1 最大长度:128 project_id 是 String 华为云项目ID,您可以从获取项目ID中获取。 最小长度:1 最大长度:128 job_id 是 String 作业id 最小长度:1 最大长度:128 表2 Query参数 参数 是否必选 参数类型 描述 search_key 否 String 模糊搜索值 最小长度:0 最大长度:1024
-
响应消息 正常响应参数说明 表2 参数说明 名称 参数类型 是否必选 说明 job Object 是 任务信息,请参见表3。 表3 job字段数据结构说明 名称 参数类型 是否必选 说明 id String 是 任务ID。 name String 是 任务名称。 status String 是 任务执行状态。 取值: 值为“Running”,表示任务正在执行。 值为“Completed”,表示任务执行成功。 值为“Failed”,表示任务执行失败。 created String 是 创建时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 ended String 是 结束时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 progress String 是 任务执行进度。 说明: 执行中状态才返回执行进度,例如“60%”,表示任务执行进度为60%,否则返回“”。 instance Object 是 执行任务的实例信息。 请参见表4。 fail_reason String 是 任务执行失败时的错误信息。 表4 instance字段数据结构说明 名称 参数类型 是否必选 说明 id String 是 实例ID。 name String 是 实例名称。 响应示例中取任务中心部分任务作为示例。
-
约束说明 目前只支持查询DDS社区版任务中心一个月内的异步任务。 job生成后,通常需要数秒之后才能查询到job ID。 目前支持查询的主要异步任务:创建实例(单节点/副本集/集群)、存储扩容、规格变更、节点扩容、重启、主备切换、修改内网地址、修改安全组、修改数据库端口、绑定/解绑弹性IP、切换SSL、迁移可用区、显示shard/config IP、创建物理备份/快照备份、备份恢复新实例、备份恢复到指定时间点、库表级时间点恢复、添加只读节点。
-
对比使用场景 对比实时校验项可以清晰反馈出源数据库和目标数据库的数据是否存在差异。为了尽可能减少业务的影响和业务中断时间,校验场景提供了以下几种对比方式: 对象级对比:支持对数据库、表、索引等进行对比。 数据级对比-行对比:对比选择的表的行数是否一致,只查询表的行数,对比速度较快,建议优先使用。 数据级比对-内容比对-静态比对:比对选择的表的内容是否一致,对比速度取决于表的数据量。 内容对比和行数对比不能同时运行。 内容对比和对象级对比不能同时运行。
-
创建对比任务 在“校验任务管理”界面,选择指定的校验任务,单击任务名称。 页面跳转至“基本信息”,切换到“校验任务”页签,进入“对比”信息页面。 选择对比的内容。 创建对象级对比:选择“对象级对比”页签,单击“开始对比”后稍等一段时间再单击,观察源数据库和目标数据库的各个对比项结果是否一致。若需要查看结果详情,可单击指定对比项操作列的“详情”按钮。 图1 对象对比 创建数据级对比:选择“数据级对比”页签,单击“创建对比任务”,选择“对比类型”和“对象选择”,单击“是”提交对比任务。 图2 创建数据对比任务 行数对比:用于对比源和目标端的表的行数是否相等。 内容对比:用于对比源和目标端的表的内容是否相同。 静态对比:适用于无数据变化的非业务时间。 对象选择:可根据具体的业务场景选择需要进行对比的对象。 创建数据过滤对比:选择“数据级对比”页签,单击“创建对比任务”,选择“对比类型”、“对比方式”勾选“进行数据过滤”选项。 图3 创建数据过滤对比任务 选择具体的对象,单击“下一步”,选择需要校验的表,输入过滤条件,单击“校验规则”。 图4 选择对象 校验完成后,点击“生成过滤规则”,然后单击“是”完成对比任务的创建。 图5 过滤规则 对比任务提交成功后,在“数据级对比”页签,单击刷新列表,可以查看到所选对比类型的对比结果。 图6 同步数据对比 若需要查看行数对比或者内容对比详情,可单击指定对比类型操作列的“查看对比报表”,页面将跳转至新的窗口,可观察对比结果的详细情况。 图7 数据级对比详情 单击“导出报告”,可导出对比报告。 导出的报告,可以单击“下载报告”,将报告下载至本地。 已取消的对比任务也支持查看对比报表。 导出的报告保留24小时,请尽快下载至本地。