使用DRS将MySQL数据库迁移到GaussDB
操作场景**
本章主要介绍如何使用DRS的实时同步功能将本地MySQL数据库实时迁移至华为云GaussDB。通过全量+增量同步,实现源数据库MySQL与目标数据库GaussDB的数据长期同步。
解决问题**
- 企业业务高速发展,传统数据库扩容性差,迫切需要分布式化改造。
- 传统数据库需要自购并安装服务器、系统、数据库等软件,运维成本高、难度大。
- 传统数据库性能瓶颈问题,复杂查询性能较差。
- 如何不中断业务并且平滑地实现数据迁移。
前提条件**
- 拥有华为云实名认证账号。
- 账户余额大于等于0元。
- 如果测试使用,需要自行在本地搭建MySQL数据库。
- 已知待迁移MySQL数据库的IP地址,端口,账户和密码。
业务架构图**
迁移原理**
本次迁移使用全量+增量同步功能,原理如下:
- 全量同步阶段,先进行结构迁移,例如表、主键、唯一键的迁移。
- 结构迁移完成后,启动增量数据抽取,以确保全量数据同步期间的增量数据完整的抽取到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 3.226企业版 | - | ||
| 实例类型 | 分布式版,3CN,3DN,3副本 | 本示例中为分布式实例。 | ||
| 部署形态 | 独立部署 | - | ||
| 事务一致性 | 强一致性 | - | ||
| 分片数量 | 3 | - | ||
| 协调节点数量 | 3 | - | ||
| 存储类型 | 超高IO | - | ||
| 可用区 | 可用区2 | 本示例中选择了单可用区,实际建议选择多可用区,以提高实例的高可用性。 | ||
| 性能规格 | 独享型(1:8) 8 vCPUs | 64GB | 本示例中为测试实例,选择较小的测试规格,实际选择规格以业务诉求为准。 | |
| 存储空间 | 480G | 本示例中为测试实例,选择较小的存储空间,实际选择存储空间大小以业务诉求为准。 | ||
| 加密磁盘 | 不加密 | 本示例中选择磁盘不加密,选择加密后会提高数据安全性,但对数据库读写性能有少量影响,实际请按照业务使用策略进行选择。 | ||
| DAS登录数据库 | 数据库引擎 | GaussDB | - | |
| 数据库来源 | GaussDB | 勾选本示例中创建的GaussDB实例 | ||
| 数据库名称 | postgres | - | ||
| 登录用户名 | root | - | ||
| 密码 | - | 本示例中创建的GaussDB实例root用户密码 | ||
| DRS迁移任务 | 迁移任务名 | DRS-test-info | 自定义。 | |
| 目标库名称 | test_database_info | 自定义,易理解可识别,但是需要确保兼容模式为MySQL模式。 | ||
| 源数据库引擎 | MySQL | - | ||
| 目标数据库引擎 | GaussDB | - | ||
| 网络类型 | 公网网络 | 本示例中采用公网网络。 |
步骤一:创建VPC和安全组**
创建VPC和安全组,为创建GaussDB实例准备网络资源和安全组。
-
登录华为云控制台。
-
单击管理控制台左上角的
,选择区域。
-
单击左侧的服务列表图标,选择“网络 > 虚拟私有云 VPC”。进入虚拟私有云信息页面。
-
单击“创建虚拟私有云”购买VPC。
-
单击“立即创建”。
-
返回VPC列表,查看创建VPC是否创建完成。
步骤二:创建GaussDB实例**
创建GaussDB实例,作为迁移任务目标库。
-
登录华为云控制台。
-
单击管理控制台左上角的
,选择区域。
-
单击左侧的服务列表图标,选择“数据库 > 云数据库 GaussDB”。
-
在左侧导航栏选择GaussDB > 实例管理。
-
单击“购买数据库实例”。
-
参考图2,配置实例名称,选择计费模式、产品类型、数据库引擎版本、实例类型、事务一致性、分片数量、协调节点数量和可用区。
-
选择实例规格、存储空间大小。
图3 实例规格
-
选择实例所属的VPC(创建VPC)和安全组(创建安全组),配置数据库端口。
图4 选择VPC和安全组
-
配置实例密码等信息。
图5 配置实例密码等信息
-
单击“立即购买”,确认信息并提交。
-
返回实例列表。
步骤三:迁移前构造数据**
迁移前需要在源库构造一些数据类型,供迁移完成后验证数据。本章端到端的数据为测试数据,仅供参考。
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(idint NOT NULL,c1char(10) DEFAULT NULL,c2varchar(10) DEFAULT NULL,c3binary(10) DEFAULT NULL,c4varbinary(10) DEFAULT NULL,c5tinyblob,c6mediumblob,c7longblob,c8tinytext,c9text,c10mediumtext,c11longtext,c12enum('1','2','3') DEFAULT NULL,c13set('1','2','3') DEFAULT NULL,c14tinyint DEFAULT NULL,c15smallint DEFAULT NULL,c16mediumint DEFAULT NULL,c17bigint DEFAULT NULL,c18float DEFAULT NULL,c19double DEFAULT NULL,c20date DEFAULT NULL,c21datetime DEFAULT NULL,c22timestamp,c23time DEFAULT NULL,c24year DEFAULT NULL,c25bit(10) DEFAULT NULL,c26json DEFAULT NULL,c27decimal(10,0) DEFAULT NULL,c28decimal(10,0) DEFAULT NULL,PRIMARY KEY (
id));
-
给用户赋权。
GRANT SELECT ,LOCK TABLES ON .
to test_info ;GRANT REPLICATION SLAVE ,REPLICATION CLIENT ON . to test_info ;
test_info为本次迁移创建的用户,为需要数据同步的库名,
为要数据同步的表名,请根据实际情况替换。
-
在表中插入两行数据。
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”。
-
左侧导航栏选择“实时同步管理”,单击“创建同步任务”。
-
配置同步实例信息。
-
配置源库及目标库信息。
-
设置同步。
-
选择全量同步对象类型,如果要同步的表结构还未在目标库创建好,就勾选同步表结构(表结构包含主键和唯一键),反之则不勾。同步索引选项按实际需求视情况勾选。
-
选择增量冲突策略。
- 忽略:当同步数据与目标库已有数据冲突时(主键/唯一键重复等),DRS将忽略源库的冲突数据,并保留目标库中的冲突数据,继续进行后续同步。选择忽略可能导致源库与目标库数据不一致。
- 报错:当同步数据与目标库已有数据冲突时(主键/唯一键重复等),同步任务将失败并立即中止。可在同步日志中查看详细信息。
- 覆盖:当同步数据与目标库已有数据冲突时(主键/唯一键重复等),将覆盖原来的冲突数据。
-
在源库选择需要迁移的数据库和表。本次迁移中选择“test_info” 中的 “test_table” 表。
-
选择完成后,可以设置迁移后是否重新命名库名和表名。
-
本次迁移将表名重新命名为“DATATYPELIST _After”。
注意重新命名时不要使用特殊符号,否则会导致迁移后执行SQL语句报错。
-
确认重命名设置内容,单击“下一步”。
-
-
高级设置。
-
数据加工。
在该页面可以对迁移的表进行加工。包括选择迁移的列,重新命名迁移后的列名,本次迁移将“c1”重新命名为“new-line”。
-
预检查。
-
任务确定。
-
任务创建成功。
-
等待迁移任务状态变为“增量同步”。
-
单击任务名称,进入任务详情页。
-
验证数据一致性。
-
通过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;可看到在源库新增的数据,可以实时同步至目标库。
-
-
结束迁移任务。
- 单击“操作”列的“结束”。
- 仔细阅读提示后,单击“是”,结束任务。
步骤四:迁移数据库**
创建DRS实例,将本地MySQL上的test_info数据库同步到GaussDB实例中test_database_info数据库中。
迁移前检查**
在创建任务前,需要针对迁移条件进行手工自检,以确保您的迁移任务更加顺畅。
在迁移前,您需要参考入云使用须知获取迁移相关说明。
创建迁移任务**
步骤五:迁移后进行数据校验**
当任务状态变为“增量同步”,说明全量同步已经完成,全量同步完成后,登录GaussDB查看数据迁移结果。
父主题: 数据库迁移
-