文档首页/ 云数据库 GaussDB/ 用户指南/ 数据库迁移/ 使用DRS将MySQL数据库迁移到GaussDB
更新时间:2025-09-05 GMT+08:00

使用DRS将MySQL数据库迁移到GaussDB

操作场景

本章主要介绍如何使用DRS的实时同步功能将本地MySQL数据库实时迁移至华为云GaussDB。通过全量+增量同步,实现源数据库MySQL与目标数据库GaussDB的数据长期同步。

步骤一:创建VPC和安全组

步骤二:创建GaussDB实例

步骤三:迁移前构造数据

步骤四:迁移数据库

步骤五:迁移后进行数据校验

解决问题

  • 企业业务高速发展,传统数据库扩容性差,迫切需要分布式化改造。
  • 传统数据库需要自购并安装服务器、系统、数据库等软件,运维成本高、难度大。
  • 传统数据库性能瓶颈问题,复杂查询性能较差。
  • 如何不中断业务并且平滑地实现数据迁移。

前提条件

  • 拥有华为云账号。
  • 账户余额大于等于0元。
  • 如果测试使用,需要自行在本地搭建MySQL数据库。
  • 已知待迁移MySQL数据库的IP地址,端口,账户和密码。

业务架构图

迁移原理

本次迁移使用全量+增量同步功能,原理如下:

  1. 全量同步阶段,先进行结构迁移,例如表、主键、唯一键的迁移。
  2. 结构迁移完成后,启动增量数据抽取,以确保全量数据同步期间的增量数据完整地抽取到DRS实例。
  3. 启动全量迁移任务。
  4. 全量迁移完成后自动进入增量同步,从全量迁移开始抽取的位点开始回放。
  5. 当增量回放全部完成后,启动比对任务进行一致性检查,支持实时比对。
  6. 实时比对数据一致时,可以启动业务割接。
图1 迁移原理图

资源规划

本章中的资源规划仅作为演示,实际业务场景资源以用户实际需求为准。

表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实例准备网络资源和安全组。

  1. 登录华为云控制台
  2. 单击管理控制台左上角的,选择区域。
  3. 单击左侧的服务列表图标,选择网络 > 虚拟私有云 VPC。进入虚拟私有云信息页面。
  4. 单击“创建虚拟私有云”购买VPC。
    图2 基本信息

    图3 子网设置

    表2 虚拟私有云参数说明

    参数

    说明

    区域

    不同区域的云服务产品之间内网互不相通,请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。

    名称

    输入VPC的名称。要求如下:

    • 长度范围为1~64位。
    • 名称由中文、英文字母、数字、下划线(_)、中划线(-)、点(.)组成。

    IPv4网段

    设置VPC的IPv4网段范围,VPC网段的选择需要考虑以下两点:

    • IP地址数量:要为业务预留足够的IP地址,防止业务扩展给网络带来冲击。
    • IP地址网段:当前VPC与其他VPC、云下数据中心连通时,要避免网络两端的IP地址冲突,否则无法正常通信。

    企业项目

    创建VPC时,可以将VPC加入已启用的企业项目。

    企业项目管理提供了一种按企业项目管理云资源的方式,帮助您实现以企业项目为基本单元的资源及人员的统一管理,默认项目为default。

    高级配置 > 标签

    单击,展开折叠的高级配置区域,可以设置该参数。

    您可以在创建VPC的时候为VPC绑定标签,标签用于标识云资源,可通过标签实现对云资源的分类和搜索。

    高级配置 > 描述

    单击,展开折叠的高级配置区域,可以设置该参数。

    您可以根据需要在文本框中输入对该VPC的描述信息。

    描述信息内容不能超过255个字符,且不能包含“<”和“>”。

    表3 子网参数说明

    参数

    说明

    子网名称

    输入子网的名称。要求如下:

    • 长度范围为1~64位。
    • 名称由中文、英文字母、数字、下划线(_)、中划线(-)、点(.)组成。

    可用区

    可用区是指在同一地域内,电力和网络互相独立的物理区域。在同一VPC网络内可用区与可用区之间内网互通,可用区之间能做到物理隔离。

    一个区域内有多个可用区,一个可用区发生故障后不会影响同一区域内的其它可用区。

    子网IPv4网段

    在开启IPv4/IPv6双栈的区域,显示此参数。

    设置子网的IPv4网段范围,子网是VPC内的IP地址块,可以将VPC的网段分成若干块,建议您规划子网时,遵循以下原则:

    • 子网内可用IP数量:子网创建成功后,不支持修改网段,请您结合业务所需的IP地址数量,提前合理规划好子网网段。
      • 子网网段不能太小,需要确保子网内可用IP地址数量可以满足业务需求。子网网段中第一个地址和后三个地址为系统预留地址,不能供实际业务使用,比如子网(10.0.0.0/24)中,10.0.0.1为网关地址、10.0.0.253为系统接口、10.0.0.254为DHCP使用、10.0.0.255为广播地址。
      • 子网网段也不能太大,以免后续扩展新的业务时,VPC内可用网段不够再创建新的子网。
    • 子网网段避免冲突:如果子网所在的VPC与其他VPC、或者VPC与云下数据中心需要通信时,则VPC子网网段和网络对端网段不能相同,否则无法正常通信。

      如果网络两端的子网网段已经相同,您可以创建新的子网,请参见为虚拟私有云创建新的子网

    子网的网段必须在VPC网段范围内,子网网段的掩码长度范围为“子网所在VPC的掩码~29”,比如VPC网段为10.0.0.0/16,掩码为16,则子网的掩码可在16~29范围内选择。

    关于VPC子网规划更详细的说明,请参见虚拟私有云和子网规划建议

    子网IPv6网段

    在开启IPv4/IPv6双栈的区域,显示此参数。

    开启IPv6功能后,将自动为子网分配IPv6网段,暂不支持自定义设置IPv6网段。该功能一旦开启,将不能关闭。

    高级配置 > 网关

    单击,展开折叠的高级配置区域,可以设置该参数。

    子网的网关,如果没有特殊需求,建议保持系统默认设置。

    高级配置 > DNS服务器地址

    单击,展开折叠的高级配置区域,可以设置该参数。

    此处默认填写华为云的DNS服务器地址,可实现云服务器在VPC内直接通过内网域名互相访问。同时,还支持不经公网,直接通过内网DNS访问云上服务。

    若您由于业务原因需要指定其他DNS服务器地址,您可以修改默认的DNS服务器地址。如果您删除默认的DNS服务器地址,可能会导致您无法访问云上其他服务,请谨慎操作。

    您也可以通过“DNS服务器地址”右侧的“重置”将DNS服务器地址恢复为默认值。

    DNS服务器地址最多支持2个IP,请以英文逗号隔开。

    高级配置 > 域名

    单击,展开折叠的高级配置区域,可以设置该参数。

    此处填写DNS域名后缀:支持填写多个域名,不同的域名之间以空格分隔,单个字符串长度不超过63个字符(以域名test.com为例,test和com是两个字符串),并且域名总长度不超过254个字符。

    访问某个域名时,只需要输入域名前缀,子网内的云服务器会自动匹配设置的域名后缀。

    域名设置完成后,子网内新创建的云服务器会自动同步该配置。

    子网内的存量云服务器,需要更新DHCP配置使域名生效,您可以重启云服器、重启DHCP Client服务或者重启网络服务。

    说明:

    对于不同操作系统云服务器,更新DHCP配置的命令不同,以下命令供您参考。

    • 重启DHCP Client服务:service dhcpd restart
    • 重启网络服务:service network restart

    高级配置 > NTP服务器地址

    单击,展开折叠的高级配置区域,可以设置该参数。

    如果您需要为当前子网新增NTP服务器地址,则需要填写该地址。此处填写的地址不会影响默认NTP服务器地址。

    • 新增或修改原有子网的NTP服务器地址后,需要子网内的ECS重新获取一次DHCP租约,或者重启ECS,才能生效。
    • 清空NTP服务器地址时,需要子网内的ECS重新获取一次DHCP租约,重启ECS无法生效。

    高级配置 > IPv4 DHCP租约时间

    单击,展开折叠的高级配置区域,可以设置该参数。

    在开启IPv4/IPv6双栈的区域,显示该参数。

    您可以设置IPv4地址的DHCP租约时间。

    DHCP租约时间是指DHCP服务器自动分配给客户端的IP地址的使用期限。超过租约时间,IP地址将被收回,需要重新分配。
    • 期限租约:设置DHCP租约期限,单位为天或者小时。
    • 无限租约:设置DHCP不过期。

    DHCP租约时间修改后,对于子网内的实例(比如ECS)来说,当实例下一次续租时,新的租约时间将会生效。实例续租分为自动更新租约和手动更新租约两种,续租不会改变实例当前的IP地址。如果需要DHCP租约立即生效,请在实例中手动更新租约或者重启实例。

    高级配置 > IPv6 DHCP租约时间

    单击,展开折叠的高级配置区域,可以设置该参数。

    在开启IPv4/IPv6双栈的区域,当“子网IPv6网段”选择“开启IPv6”时,显示该参数。

    您可以设置IPv6地址的DHCP租约时间。IPv6 地址和IPv4地址的租约时间设置方法、生效情况相同。

    高级配置 > 标签

    单击,展开折叠的高级配置区域,可以设置该参数。

    您可以在创建子网的时候为子网绑定标签,标签用于标识云资源,可通过标签实现对云资源的分类和搜索。

    高级配置 > 描述

    单击,展开折叠的高级配置区域,可以设置该参数。

    您可以根据需要在文本框中输入对该子网的描述信息。

    描述信息内容不能超过255个字符,且不能包含“<”和“>”。

  5. 单击“立即创建”。
  6. 返回VPC列表,查看创建VPC是否创建完成。

    当VPC列表的VPC状态为“可用”时,表示VPC创建完成。

  1. 登录华为云控制台
  2. 单击管理控制台左上角的,选择区域。
  3. 单击左侧的服务列表图标,选择网络 > 虚拟私有云 VPC。进入虚拟私有云信息页面。
  4. 选择“访问控制 > 安全组”。
  5. 单击“创建安全组”。
  6. 填写安全组名称等信息。
    图4 基本信息

    表4 参数说明

    参数

    参数说明

    区域

    不同区域的云服务产品之间内网互不相通,请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。

    安全组和实例必须位于同一个区域内,才可以将实例添加到安全组内。

    名称

    输入安全组的名称。要求如下:
    • 长度范围为1~64位。
    • 名称由中文、英文字母、数字、下划线(_)、中划线(-)、点(.)组成。

    安全组名称创建后可以修改,建议不要重名。

    企业项目

    创建安全组时,可以将安全组加入已启用的企业项目。

    企业项目管理提供了一种按企业项目管理云资源的方式,帮助您实现以企业项目为基本单元的资源及人员的统一管理,默认项目为default。

    标签

    您可以在创建安全组的时候为安全组绑定标签,标签用于标识安全组资源,可通过标签实现对安全组资源的分类和搜索。

    描述

    安全组的描述信息。

    描述信息内容不能超过255个字符,且不能包含“<”和“>”。

  7. 选择“入方向规则”,单击“添加规则”。

  8. 配置入方向规则,添加源库的IP地址。
    图5 配置入方向规则

  9. 单击“立即创建”。

步骤二:创建GaussDB实例

创建GaussDB实例,作为迁移任务目标库。

  1. 登录华为云控制台
  2. 单击管理控制台左上角的,选择区域。
  3. 单击左侧的服务列表图标,选择数据库 > 云数据库 GaussDB
  4. 在左侧导航栏选择GaussDB > 实例管理
  5. 单击“购买数据库实例”。
  6. 参考图6,配置实例名称,选择计费模式、产品类型、数据库引擎版本、实例类型、事务一致性、分片数量、协调节点数量和可用区。
    图6 基本信息

  7. 选择实例规格、存储空间大小。
    图7 实例规格

  8. 选择实例所属的VPC(创建VPC)和安全组(创建安全组),配置数据库端口。
    图8 选择VPC和安全组

  9. 配置实例密码等信息。
    图9 配置实例密码等信息

  10. 单击“立即购买”,确认信息并提交。
  11. 返回实例列表。

    当实例运行状态为“正常”时,表示实例创建完成。

步骤三:迁移前构造数据

迁移前需要在源库构造一些数据类型,供迁移完成后验证数据。本章端到端的数据为测试数据,仅供参考。

DRS支持的数据类型可参考MySQL->GaussDB数据映射关系

执行如下步骤在源库构造数据:

  1. 根据本地的MySQL数据库的IP地址,通过数据库连接工具连接数据库。
  2. 根据DRS支持的数据类型,在源库执行语句构造数据。
    1. 创建一个测试用的用户。

      create user test_info identified by xxx;

      test_info为本次迁移创建的用户,xxx为用户的密码,请根据实际情况替换。

    2. 在当前用户下创建一个数据库test_info。

      CREATE DATABASE test_info;

    3. 在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`)

      );

    4. 给用户赋权。

      GRANT SELECT,LOCK TABLES ON <database>.<table> to test_info;

      GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* to test_info;

      test_info为本次迁移创建的用户,<database>为需要数据同步的库名,<table>为要数据同步的表名,请根据实际情况替换。

    5. 在表中插入两行数据。

      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);

  3. 在目标端创建库。
    1. 登录华为云控制台
    2. 单击管理控制台左上角的,选择区域。
    3. 单击左侧的服务列表图标,选择数据库 > 数据管理服务 DAS
    4. 在数据管理服务DAS左侧导航栏,单击“开发工具”,进入开发工具数据库登录列表页面。
    5. 单击“新增数据库实例登录”,打开新增数据库实例登录窗口。
    6. 选择“数据库引擎”、“数据库来源”,填写登录用户名、密码以及描述(非必填项)信息,开启SQL执行记录功能。
    1. 单击“测试连接”测试连接是否成功。

      如测试连接成功,将提示“连接成功”,您可继续新增操作。如测试连接失败,将提示连接失败原因,您需根据提示信息进行修改,以便新增数据库登录成功。

    2. 设置完登录信息,单击“立即新增”。
    3. 新增完成后,单击新增登录的“登录”,登录当前数据库。
      图10 登录数据库
    4. 选择“SQL操作”> “SQL查询”进入SQL查询页面。

    5. 执行如下语句创建兼容MySQL的数据库。
      此例中为:test_database_info,请根据实际情况选择。
      CREATE DATABASE test_database_info DBCOMPATIBILITY 'mysql';

步骤四:迁移数据库

创建DRS实例,将本地MySQL上的test_info数据库同步到GaussDB实例中test_database_info数据库中。

迁移前检查

在创建任务前,需要针对迁移条件进行手工自检,以确保您的迁移任务更加顺畅。

在迁移前,您需要参考入云使用须知获取迁移相关说明。

创建迁移任务

  1. 登录华为云控制台
  2. 单击管理控制台左上角的,选择区域。

    选择目标实例所在的区域。

  3. 单击左侧的服务列表图标,选择数据库 > 数据复制服务 DRS
  4. 左侧导航栏选择“实时同步管理”,单击“创建同步任务”。
  5. 配置同步实例信息。
    1. 选择区域,计费模式,项目,填写任务名称。

    2. 配置同步实例信息,选择“数据流动方向”、“源数据库引擎”、“目标数据库引擎”、“网络类型”、“DRS任务类型”、“目标数据库实例”、“同步实例所在子网”(非必选)、“同步模式”,选择“规格类型”和“可用区”,选填“标签”。

    3. 单击“开始创建”。
  6. 配置源库及目标库信息。
    1. 填写源库的IP、端口、用户、密码等信息。

      填写完成后,需要单击“测试连接”,测试连接信息是否正确。

    2. 填写目标库的账户和密码。

      填写完成后,需要单击“测试连接”,测试连接信息是否正确。

    3. 单击“下一步”,仔细阅读提示内容后,单击“同意,并继续”。

  7. 设置同步。
    1. 选择全量同步对象类型,如果要同步的表结构还未在目标库创建好,就勾选同步表结构(表结构包含主键和唯一键),反之则不勾。同步索引选项按实际需求视情况勾选。

    2. 选择增量冲突策略。
      • 忽略:当同步数据与目标库已有数据冲突时(主键/唯一键重复等),DRS将忽略源库的冲突数据,并保留目标库中的冲突数据,继续进行后续同步。选择忽略可能导致源库与目标库数据不一致。
      • 报错:当同步数据与目标库已有数据冲突时(主键/唯一键重复等),同步任务将失败并立即中止。可在同步日志中查看详细信息。
      • 覆盖:当同步数据与目标库已有数据冲突时(主键/唯一键重复等),将覆盖原来的冲突数据。

    3. 在源库选择需要迁移的数据库和表。本次迁移中选择“test_info”中的“test_table”表。

    4. 选择完成后,可以设置迁移后是否重新命名库名和表名。

    5. 本次迁移将表名重新命名为“DATATYPELIST_After”。

      注意重新命名时不要使用特殊符号,否则会导致迁移后执行SQL语句报错。

    6. 确认重命名设置内容,单击“下一步”。

  8. 高级设置。

    本页面内容仅做确认,无法修改,确认完成后单击“下一步”。

  9. 数据加工。
    在该页面可以对迁移的表进行加工。包括选择迁移的列,重新命名迁移后的列名,本次迁移将“c1”重新命名为“new-line”。
    1. 选择需要加工的表。

    2. 编辑“c1”列。

    3. 将“c1”重新命名为“new-line”,单击“确定”。
    4. 单击“下一步”。
  10. 预检查。
    1. 所有配置完成后,进行预检查,确保迁移成功。
    2. 对于未通过的项目,根据检查结果中的提示信息修复,修复完成后,单击“重新校验”,直到预检查通过率为100%。

    3. 预检查全部通过后,单击“下一步”。
  11. 任务确定。
    1. 检查所有配置项是否正确。

    2. 单击“启动任务”,仔细阅读提示后,勾选“我已阅读启动前须知”。
    3. 单击“启动任务”,完成任务创建。

  12. 任务创建成功。

    任务创建成功后,返回任务列表查看创建的任务状态。

步骤五:迁移后进行数据校验

当任务状态变为“增量同步”,说明全量同步已经完成,全量同步完成后,登录GaussDB查看数据迁移结果。

  1. 等待迁移任务状态变为“增量同步”。

  2. 单击任务名称,进入任务详情页。
  3. 验证数据一致性。
    1. 在“同步对比 > 对象级对比”页面,查看库和表的迁移结果。

    2. 在“同步对比 > 数据级对比”页面,创建对比任务,查看表中行的迁移结果。

  4. 通过DAS连接GaussDB的目标库“test_database_info ”。

    DAS连接实例的方法请参考《新增数据库登录》

  5. 执行如下语句,查询全量同步结果。
    SELECT * FROM test_info.datatypelist_after;

    MySQL数据库中的模式迁移完成后,会在GaussDB库中作为Schema,所以查询语句中添加Schema精确查询。

    可查询表中的各个数据类型都迁移成功,并且数据正确无误。

  6. 验证增量同步。
    由于本次迁移为“全量+增量”同步模式,全量同步完成后,如果在创建任务后有数据写入,这些写入的数据会一直同步至目标库中,直到任务结束。下面为模拟写入另外的数据。
    1. 根据本地的MySQL数据库的IP和地址,通过数据库连接工具连接数据库。
    2. 执行如下语句,在源库插入一条数据。

      插入一条“id”为3的数据。

      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);
    3. 在目标库执行如下语句查询结果。
      SELECT * FROM test_info.datatypelist_after;

      可看到在源库新增的数据,可以实时同步至目标库。

  7. 结束迁移任务。
    根据业务情况,待业务完全迁移至目标库,可以结束当前任务。
    1. 单击“操作”列的“结束”。
    2. 仔细阅读提示后,单击“是”,结束任务。