迁移原理
本次迁移使用全量+增量同步功能,原理如下:
- 全量同步阶段,先进行结构迁移,例如表、主键、唯一键的迁移。
- 结构迁移完成后,启动增量数据抽取,以确保全量数据同步期间的增量数据完整的抽取到DRS实例。
- 启动全量迁移任务。
- 全量迁移完成后自动进入增量同步,从全量迁移开始抽取的位点开始回放。
- 当增量回放全部完成后,启动比对任务进行一致性检查,支持实时比对。
- 实时比对数据一致时,可以启动业务割接。
图1 迁移原理图
资源规划
本章中的资源规划仅作为演示,实际业务场景资源以用户实际需求为准。
类别 | 子类 | 规划 | 备注 |
---|---|---|---|
VPC | VPC名称 | vpc-src-172 | 自定义,易理解可识别。 |
所属Region | 测试Region | 现网实际选择时建议选择和自己业务区最近的Region,减少网络时延。 | |
可用区 | 可用区3 | - | |
子网网段 | 172.16.0.0/16 | 子网选择时建议预留足够的网络资源。 | |
子网名称 | subnet-src-172 | 自定义,易理解可识别。 | |
本地MySQL数据库 | 数据库版本 | 5.7.38 | - |
数据库用户 | test_info | 可以自定义用户,但是迁移时最小权限为:SELECT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT | |
GaussDB | 实例名 | Auto-drs-gaussdbv5-tar-1 | 自定义,易理解可识别。 |
数据库版本 | GaussDB V2.0-8.103企业版 | - | |
实例类型 | 分布式版,3CN,3DN,3副本 | 本示例中为分布式实例。 | |
部署形态 | 独立部署 | - | |
事务一致性 | 强一致性 | - | |
分片数量 | 3 | - | |
协调节点数量 | 3 | - | |
存储类型 | 超高IO | - | |
可用区 | 可用区2 | 本示例中选择了单可用区,实际建议选择多可用区,以提高实例的高可用性。 | |
性能规格 | 独享型(1:8) 8 vCPUs | 64GB | 本示例中为测试实例,选择较小的测试规格,实际选择规格以业务诉求为准。 | |
存储空间 | 480GB | 本示例中为测试实例,选择较小的存储空间,实际选择存储空间大小以业务诉求为准。 | |
加密磁盘 | 不加密 | 本示例中选择磁盘不加密,选择加密后会提高数据安全性,但对数据库读写性能有少量影响,实际请按照业务使用策略进行选择。 | |
DAS登录数据库 | 数据库引擎 | GaussDB | - |
数据库来源 | GaussDB | 勾选本示例中创建的GaussDB实例 | |
数据库名称 | postgres | - | |
登录用户名 | root | - | |
密码 | - | 本示例中创建的GaussDB实例root用户密码 | |
DRS迁移任务 | 迁移任务名 | DRS-test-info | 自定义。 |
目标库名称 | test_database_info | 自定义,易理解可识别,但是需要确保兼容模式为MySQL模式。 | |
源数据库引擎 | MySQL | - | |
目标数据库引擎 | GaussDB | - | |
网络类型 | 公网网络 | 本示例中采用公网网络。 |
步骤一:创建VPC和安全组
创建VPC和安全组,为创建GaussDB实例准备网络资源和安全组。
-
创建VPC
-
创建安全组
- 登录华为云控制台。
- 单击管理控制台左上角的
,选择区域。 - 单击左侧的服务列表图标,选择“网络 > 虚拟私有云 VPC”。进入虚拟私有云信息页面。
- 单击“创建虚拟私有云”购买VPC。
图2 基本信息
图3 子网设置
- 单击“立即创建”。
- 返回VPC列表,查看创建VPC是否创建完成。
步骤二:创建GaussDB实例
创建GaussDB实例,作为迁移任务目标库。
- 登录华为云控制台。
- 单击管理控制台左上角的
,选择区域。 - 单击左侧的服务列表图标,选择“数据库 > 云数据库 GaussDB”。
- 在左侧导航栏选择GaussDB > 实例管理。
- 单击“购买数据库实例”。
- 参考图6,配置实例名称,选择计费模式、产品类型、数据库引擎版本、实例类型、事务一致性、分片数量、协调节点数量和可用区。
- 选择实例规格、存储空间大小。
图7 实例规格
- 选择实例所属的VPC(创建VPC)和安全组(创建安全组),配置数据库端口。
图8 选择VPC和安全组
- 配置实例密码等信息。
图9 配置实例密码等信息
- 单击“立即购买”,确认信息并提交。
- 返回实例列表。
步骤三:迁移前构造数据
迁移前需要在源库构造一些数据类型,供迁移完成后验证数据。本章端到端的数据为测试数据,仅供参考。
DRS支持的数据类型可参考MySQL->GaussDB数据映射关系。
执行如下步骤在源库构造数据:
- 根据本地的MySQL数据库的IP地址,通过数据库连接工具连接数据库。
- 根据DRS支持的数据类型,在源库执行语句构造数据。
- 创建一个测试用的用户。
create user test_info identified by xxx;
test_info为本次迁移创建的用户,xxx为用户的密码,请根据实际情况替换。
- 在当前用户下创建一个数据库test_info。
- 在test_info库下创建一个表。
CREATE TABLE `test_info`.`test_table` (
`id` int NOT NULL,
`c1` char(10) DEFAULT NULL,
`c2` varchar(10) DEFAULT NULL,
`c3` binary(10) DEFAULT NULL,
`c4` varbinary(10) DEFAULT NULL,
`c5` tinyblob,
`c6` mediumblob,
`c7` longblob,
`c8` tinytext,
`c9` text,
`c10` mediumtext,
`c11` longtext,
`c12` enum('1','2','3') DEFAULT NULL,
`c13` set('1','2','3') DEFAULT NULL,
`c14` tinyint DEFAULT NULL,
`c15` smallint DEFAULT NULL,
`c16` mediumint DEFAULT NULL,
`c17` bigint DEFAULT NULL,
`c18` float DEFAULT NULL,
`c19` double DEFAULT NULL,
`c20` date DEFAULT NULL,
`c21` datetime DEFAULT NULL,
`c22` timestamp,
`c23` time DEFAULT NULL,
`c24` year DEFAULT NULL,
`c25` bit(10) DEFAULT NULL,
`c26` json DEFAULT NULL,
`c27` decimal(10,0) DEFAULT NULL,
`c28` decimal(10,0) DEFAULT NULL,
PRIMARY KEY (`id`)
);
- 给用户赋权。
GRANT SELECT,LOCK TABLES ON <database>.<table> to test_info;
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* to test_info;
test_info为本次迁移创建的用户,<database>为需要数据同步的库名,<table>为要数据同步的表名,请根据实际情况替换。
- 在表中插入两行数据。
insert into test_info.test_table values (1,'a','b','111','111','tinyblob','mediumblob','longblob','tinytext','text','mediumtext','longtext','1','3',1,2,3,4,1.123,1.1234,'2024-03-08','2024-03-08 08:00:00','2024-03-08 08:00:00','08:00:00','2024','1010','{"a":"b"}',1.23,1.234);
insert into test_info.test_table values (2,'a','b','111','111','tinyblob','mediumblob','longblob','tinytext','text','mediumtext','longtext','1','3',1,2,3,4,1.123,1.1234,'2024-03-08','2024-03-08 08:00:00','2024-03-08 08:00:00','08:00:00','2024','1010','{"a":"b"}',1.23,1.234);
- 创建一个测试用的用户。
- 在目标端创建库。
- 登录华为云控制台。
- 单击管理控制台左上角的
,选择区域。 - 单击左侧的服务列表图标,选择“数据库 > 数据管理服务 DAS”。
- 在数据管理服务DAS左侧导航栏,单击“开发工具”,进入开发工具数据库登录列表页面。
- 单击“新增数据库实例登录”,打开新增数据库实例登录窗口。
- 选择“数据库引擎”、“数据库来源”,填写登录用户名、密码以及描述(非必填项)信息,开启SQL执行记录功能。
步骤四:迁移数据库
创建DRS实例,将本地MySQL上的test_info数据库同步到GaussDB实例中test_database_info数据库中。
迁移前检查
在创建任务前,需要针对迁移条件进行手工自检,以确保您的迁移任务更加顺畅。
在迁移前,您需要参考入云使用须知获取迁移相关说明。
创建迁移任务
- 登录华为云控制台。
- 单击管理控制台左上角的
,选择区域。选择目标实例所在的区域。
- 单击左侧的服务列表图标,选择“数据库 > 数据复制服务 DRS”。
- 左侧导航栏选择“实时同步管理”,单击“创建同步任务”。
- 配置同步实例信息。
- 配置源库及目标库信息。
- 设置同步。
- 选择全量同步对象类型,如果要同步的表结构还未在目标库创建好,就勾选同步表结构(表结构包含主键和唯一键),反之则不勾。同步索引选项按实际需求视情况勾选。
- 选择增量冲突策略。
- 忽略:当同步数据与目标库已有数据冲突时(主键/唯一键重复等),DRS将忽略源库的冲突数据,并保留目标库中的冲突数据,继续进行后续同步。选择忽略可能导致源库与目标库数据不一致。
- 报错:当同步数据与目标库已有数据冲突时(主键/唯一键重复等),同步任务将失败并立即中止。可在同步日志中查看详细信息。
- 覆盖:当同步数据与目标库已有数据冲突时(主键/唯一键重复等),将覆盖原来的冲突数据。
- 在源库选择需要迁移的数据库和表。本次迁移中选择“test_info”中的“test_table”表。
- 选择完成后,可以设置迁移后是否重新命名库名和表名。
- 本次迁移将表名重新命名为“DATATYPELIST_After”。
注意重新命名时不要使用特殊符号,否则会导致迁移后执行SQL语句报错。
- 确认重命名设置内容,单击“下一步”。
- 选择全量同步对象类型,如果要同步的表结构还未在目标库创建好,就勾选同步表结构(表结构包含主键和唯一键),反之则不勾。同步索引选项按实际需求视情况勾选。
- 高级设置。
- 数据加工。在该页面可以对迁移的表进行加工。包括选择迁移的列,重新命名迁移后的列名,本次迁移将“c1”重新命名为“new-line”。
- 预检查。
- 任务确定。
- 任务创建成功。
步骤五:迁移后进行数据校验
当任务状态变为“增量同步”,说明全量同步已经完成,全量同步完成后,登录GaussDB查看数据迁移结果。
- 等待迁移任务状态变为“增量同步”。
- 单击任务名称,进入任务详情页。
- 验证数据一致性。
- 通过DAS连接GaussDB的目标库“test_database_info ”。
DAS连接实例的方法请参考《新增数据库登录》。
- 执行如下语句,查询全量同步结果。
SELECT * FROM test_info.datatypelist_after;
MySQL数据库中的模式迁移完成后,会在GaussDB库中作为Schema,所以查询语句中添加Schema精确查询。
可查询表中的各个数据类型都迁移成功,并且数据正确无误。
- 验证增量同步。由于本次迁移为“全量+增量”同步模式,全量同步完成后,如果在创建任务后有数据写入,这些写入的数据会一直同步至目标库中,直到任务结束。下面为模拟写入另外的数据。
- 根据本地的MySQL数据库的IP和地址,通过数据库连接工具连接数据库。
- 执行如下语句,在源库插入一条数据。
insert into test_info.test_table values (3,'a','b','111','111','tinyblob','mediumblob','longblob','tinytext','text','mediumtext','longtext','1','3',1,2,3,4,1.123,1.1234,'2024-03-08','2024-03-08 08:00:00','2024-03-08 08:00:00','08:00:00','2024','1010','{"a":"b"}',1.23,1.234);
- 在目标库执行如下语句查询结果。
SELECT * FROM test_info.datatypelist_after;
可看到在源库新增的数据,可以实时同步至目标库。
- 结束迁移任务。根据业务情况,待业务完全迁移至目标库,可以结束当前任务。
- 单击“操作”列的“结束”。
- 仔细阅读提示后,单击“是”,结束任务。