PingKai Logo下载

使用数据迁移将 MySQL 兼容数据库迁移到平凯数据库云服务

本文档将指导你如何使用平凯数据库云服务控制台中的数据迁移功能,将你的 MySQL 数据库(包括 Amazon Aurora MySQL、Amazon RDS、Azure Database for MySQL - Flexible Server、Google Cloud SQL for MySQL 或自建 MySQL 实例)迁移到 平凯云 Essential 或 平凯云 Premium 实例。

该功能支持将现有 MySQL 数据迁移并持续复制 MySQL 兼容源数据库的实时变更(binlog)到平凯数据库云服务,无论源库和目标库是否在同一区域,都能保证数据一致性。该流程无需单独的导出和加载操作,极大减少了停机时间,并简化了从 MySQL 向更具扩展性的平凯数据库云服务平台的迁移过程。

如果你只想将 MySQL 兼容数据库的实时 binlog 变更同步到平凯数据库云服务,请参见使用数据迁移将 MySQL 兼容数据库的增量数据迁移到平凯数据库云服务。

限制

可用性

  • 目前,数据迁移功能不支持平凯数据库云服务 Starter。

  • Amazon Aurora MySQL writer 实例支持现有数据和增量数据迁移。Amazon Aurora MySQL reader 实例仅支持现有数据迁移,不支持增量数据迁移。

最大迁移任务数

每个组织在平凯数据库云服务 Essential 实例上最多可创建 100 个迁移任务。如需更多迁移任务,请 提交支持工单。

被过滤和已删除的数据库

  • 系统数据库会被自动过滤,即使你选择迁移所有数据库,也不会迁移到平凯数据库云服务。也就是说,mysql、information_schema、performance_schema 和 sys 这几个数据库不会通过该功能迁移。

阿里云 RDS 的限制

使用阿里云 RDS 作为数据源时,每个表必须有显式主键。对于没有主键的表,RDS 会在 binlog 中追加隐藏主键,导致与源表结构不一致,进而导致迁移失败。

阿里云 PolarDB-X 的限制

在全量数据迁移过程中,PolarDB-X 的 schema 可能包含下游数据库不兼容的关键字,导致导入失败。

为避免此问题,请在迁移前先在下游数据库中创建目标表。

现有数据迁移的限制

  • 在现有数据迁移过程中,如果目标数据库已存在待迁移的表且存在主键冲突,冲突的行会被替换。

  • 对于平凯数据库云服务 Essential,目前仅支持逻辑模式迁移数据。该模式会将 MySQL 源数据库的数据导出为 SQL 语句并在 TiDB 上执行。在此模式下,目标表可以为空表或非空表。

增量数据迁移的限制

  • 在增量数据迁移过程中,如果目标数据库已存在待迁移表且有主键冲突,会报错并中断迁移。此时需确认 MySQL 源数据的准确性。如果数据无误,点击迁移任务的 重启 按钮,迁移任务会用 MySQL 源数据替换目标平凯数据库云服务 Essential 实例中的冲突记录。

  • 在增量数据迁移(将实时变更迁移到你的平凯数据库云服务 Essential 实例)过程中,如果迁移任务从异常中恢复,可能会开启 60 秒的安全模式。在安全模式下,INSERT 语句会以 REPLACE 方式迁移,UPDATE 语句会以 DELETE 和 REPLACE 方式迁移,然后将这些事务迁移到目标平凯数据库云服务 Essential 实例,以确保异常期间的所有数据都能顺利迁移到目标平凯数据库云服务 Essential 实例。在此场景下,如果 MySQL 源表没有主键或非空唯一索引,目标平凯数据库云服务 Essential 实例中可能会出现重复数据,因为数据可能被重复插入到目标平凯数据库云服务 Essential 实例中。

前置条件

在迁移前,请检查你的数据源是否受支持,确保 MySQL 兼容数据库已开启 binary log,网络连通性正常,并为源数据库和目标实例数据库授予所需权限。

确认数据源及版本受支持

对于 平凯云 Essential 和 平凯云 Premium ,数据迁移功能支持以下数据源及版本:

数据源支持的版本
自建 MySQL(本地或公有云)8.0, 5.7
Amazon Aurora MySQL8.0, 5.7
Amazon RDS MySQL8.0, 5.7
阿里云 RDS MySQL8.0, 5.7
Azure Database for MySQL - Flexible Server8.0, 5.7
Google Cloud SQL for MySQL8.0, 5.7

在源 MySQL 兼容数据库中开启 binary log 以支持复制

要通过 DM 持续复制源 MySQL 兼容数据库的增量变更到目标实例,需要在源数据库中进行如下配置以开启 binary log:

配置项要求的值说明
log_binON启用 binary log,DM 用于将变更复制到 TiDB
binlog_formatROW精确捕获所有数据变更(其他格式可能遗漏边界情况)
binlog_row_imageFULL事件中包含所有列值,便于安全解决冲突
binlog_expire_logs_seconds≥ 86400(1 天),604800(7 天,推荐)确保迁移期间 DM 能访问连续的日志
binlog_transaction_compressionOFFDM 不支持事务压缩

检查当前配置并配置源 MySQL 实例

要检查当前配置,连接到源 MySQL 实例并执行以下语句:

SHOW VARIABLES WHERE Variable_name IN
('log_bin','server_id','binlog_format','binlog_row_image',
'binlog_expire_logs_seconds','expire_logs_days','binlog_transaction_compression');

如有必要,请将源 MySQL 实例的配置修改为要求的值。

配置自建 MySQL 实例
  1. 打开 /etc/my.cnf,添加如下内容:

    [mysqld]
    log_bin = mysql-bin
    binlog_format = ROW
    binlog_row_image = FULL
    binlog_expire_logs_seconds = 604800   # 7 天保留
    binlog_transaction_compression = OFF
  2. 重启 MySQL 服务以使配置生效:

    sudo systemctl restart mysqld
  3. 再次执行 SHOW VARIABLES 语句,确认设置已生效。

详细说明请参见 MySQL 官方文档:MySQL Server System Variables 和 The Binary Log。

配置 AWS RDS 或 Aurora MySQL
  1. 在 AWS 管理控制台,打开 Amazon RDS 控制台,点击左侧导航栏的 Parameter groups,创建或编辑自定义参数组。
  2. 将上述四个参数设置为要求的值。
  3. 将参数组关联到你的实例或集群,并重启以使配置生效。
  4. 重启后,连接到实例并执行 SHOW VARIABLES 语句,确认配置。

详细说明请参见 AWS 官方文档:Working with DB Parameter Groups 和 Configuring MySQL Binary Logging。

配置 Azure Database for MySQL - Flexible Server
  1. 在 Azure 门户中,搜索并选择 Azure Database for MySQL servers,点击你的实例名称,然后点击左侧导航栏的 Setting > Server parameters。

  2. 搜索每个参数并更新其值。

    大多数更改无需重启即可生效。如需重启,门户会有提示。

  3. 执行 SHOW VARIABLES 语句,确认配置。

详细说明请参见 Microsoft Azure 官方文档:Configure server parameters in Azure Database for MySQL - Flexible Server using the Azure portal。

配置 Google Cloud SQL for MySQL
  1. 在 Google Cloud 控制台中,选择包含你的实例的项目,点击实例名称,然后点击 Edit。
  2. 添加或修改所需的 flags(log_bin、binlog_format、binlog_row_image、binlog_expire_logs_seconds)。
  3. 点击 Save。如需重启,控制台会有提示。
  4. 重启后,执行 SHOW VARIABLES 语句,确认更改。

详细说明请参见 Google Cloud 官方文档:Configure database flags 和 Use point-in-time recovery。

配置阿里云 RDS MySQL
  1. 在 ApsaraDB RDS 控制台中,选择你的实例所在区域,然后点击 RDS for MySQL 实例的 ID。

  2. 在左侧导航栏点击 参数设置,搜索每个参数,并设置如下值:

    • binlog_row_image: FULL
  3. 在左侧导航栏点击 备份与恢复,选择 备份策略。为确保迁移期间 DM 能访问连续的 binlog 文件,请按如下约束配置备份策略:

    • 保留时间:至少设置为 3 天(推荐 7 天)。

    • 保留文件数:确保“最大文件数”足够,避免旧日志过早被覆盖。

    • 存储保障:密切关注存储使用情况。注意,如果磁盘空间达到系统阈值,RDS 会自动清理最早的 binlog,无论保留时间设置如何。

  4. 应用更改(如需重启则重启后),连接到实例并执行本节的 SHOW VARIABLES 语句,确认配置。

更多信息请参见 设置实例参数。

确保网络连通性

在创建迁移任务前,你需要规划并设置源 MySQL 实例、平凯数据库云服务数据迁移(DM)服务与目标实例之间的网络连通性。

可用的连接方式如下:

连接方式可用性推荐场景
公网 endpoint 或 IP 地址支持平凯数据库云服务支持的所有云厂商快速概念验证迁移、测试或无法使用私有连接时
Private link 或 private endpoint仅支持 AWS 和阿里云生产环境工作负载,避免数据暴露在公网

请选择最适合你的云厂商、网络拓扑和安全需求的连接方式,并按照相应方式的设置说明进行配置。

端到端 TLS/SSL 加密

无论采用哪种连接方式,强烈建议使用 TLS/SSL 实现端到端加密。即使使用 private endpoint保障了网络路径安全,TLS/SSL 仍能保护数据本身并满足合规要求。

下载并保存云厂商的证书以支持 TLS/SSL 加密连接

公网 endpoint 或 IP 地址

使用公网 endpoint 时,你可以在现在和后续 DM 任务创建过程中验证网络连通性和访问权限。平凯数据库云服务会在该阶段提供具体的出口 IP 地址及相关操作提示。

  1. 确认并记录源 MySQL 实例的 endpoint 主机名(FQDN)或公网 IP 地址。

  2. 确保你有权限修改数据库的防火墙或安全组规则。可参考各云厂商文档:

  3. 可选:使用具备公网访问权限的机器,结合传输加密证书,验证源数据库连通性:

    mysql -h <public-host> -P <port> -u <user> -p --ssl-ca=<path-to-provider-ca.pem> -e "SELECT version();"
  4. 后续在数据迁移任务设置过程中,平凯数据库云服务会提供出口 IP 段。届时需将该 IP 段加入数据库的防火墙或安全组规则,操作方法同上。

如需使用云厂商原生 private link 或 private endpoint,请为你的源 MySQL 实例创建 Private Link Connection。

授予迁移所需权限

在开始迁移前,你需要在源数据库和目标数据库分别设置合适的数据库用户,并授予所需权限。这些权限用于让平凯数据库云服务 DM 读取 MySQL 数据、复制变更并安全写入目标平凯数据库云服务 Essential 实例。由于迁移涉及现有数据的全量导出和增量变更的 binlog 复制,迁移用户需要超出只读权限的特定权限。

为源 MySQL 数据库的迁移用户授权

测试环境可直接使用源 MySQL 数据库的管理员用户(如 root)。

生产环境建议为数据导出和复制专门创建用户,并仅授予必要权限:

权限作用范围目的
SELECT表允许读取所有表数据
RELOAD全局确保全量导出期间快照一致
REPLICATION SLAVE全局支持增量数据迁移的 binlog 流式复制
REPLICATION CLIENT全局允许访问 binlog 位置和服务器状态
LOCK TABLES表当源端是托管 MySQL 服务(如 Amazon RDS、Aurora、ApsaraDB RDS for MySQL、Azure Database for MySQL 或 Google Cloud SQL),且不允许使用 FLUSH TABLES WITH READ LOCK (FTWRL) 时,需要此权限。在这种情况下,DM 会回退使用 LOCK TABLES 以确保全量数据导出期间的一致性。对于可使用 FTWRL 的自管理 MySQL 实例,则不需要此权限。

例如,你可以在源 MySQL 实例中执行如下 GRANT 语句:

-- 对于自管理 MySQL:
GRANT SELECT, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'dm_source_user'@'%';

-- 对于托管 MySQL 服务(如 Amazon RDS 和 Aurora),还需要授予 LOCK TABLES 权限:
GRANT SELECT, RELOAD, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'dm_source_user'@'%';

授予目标 平凯云 Essential 实例所需权限

出于测试目的,你可以使用 平凯云 Essential 实例的 root 账户。

对于生产工作负载,建议在目标 平凯云 Essential 实例中为复制创建一个专用用户,并且仅授予必要的权限:

权限范围用途
CREATE数据库、表在目标端创建 schema 对象
SELECT表在迁移期间校验数据
INSERT表写入迁移的数据
UPDATE表在增量数据迁移期间修改现有行
DELETE表在复制或更新期间删除行
ALTER表在 schema 变更时修改表定义
DROP数据库、表在 schema 同步期间删除对象
INDEX表创建和修改索引
CREATE VIEW视图创建迁移使用的视图

例如,你可以在目标 平凯云 Essential 实例中执行以下 GRANT 语句来授予相应权限:

GRANT CREATE, SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, INDEX, CREATE VIEW ON *.* TO 'dm_target_user'@'%';

第 1 步:进入数据迁移页面

  1. 登录 平凯数据库云服务控制台,进入 My TiDB页面。

  2. 点击目标平凯数据库云服务 Essential 实例名称进入概览页,然后点击左侧导航栏的 Data > Data Migration。

  3. 在 Data Migration 页面,点击右上角的 Create Migration Job。此时会进入 Create Migration Job 页面。

第 2 步:配置源和目标连接

在 Create Migration Job 页面,配置源和目标连接信息。

  1. 输入任务名称,需以字母开头且少于 60 个字符。可包含字母(A-Z, a-z)、数字(0-9)、下划线(_)和连字符(-)。

  2. 填写源连接信息。

    • Data source:数据源类型。

    • Connectivity method:根据安全需求和云厂商选择数据源连接方式:

      • Public:适用于所有云厂商(推荐用于测试和概念验证迁移)。
      • Private Link:仅适用于 AWS 和阿里云(推荐生产环境需要私有连接的场景)。
    • 根据所选 Connectivity method,进行如下操作:

      • 选择 Public 时,在 Hostname or IP address 字段填写数据源的主机名或 IP 地址。
      • 选择 Private Link 时,选择你在 Private link or private endpoint 部分创建的 private link 连接。
    • Port:数据源端口。

    • User Name:数据源用户名。

    • Password:用户名对应的密码。

    • SSL/TLS:启用 SSL/TLS 以实现端到端数据加密(强烈推荐所有迁移任务开启)。根据 MySQL 服务器的 SSL 配置上传相应证书。

      SSL/TLS 配置选项:

      • 选项 1:仅服务器认证

        • 如果 MySQL 服务器仅配置服务器认证,只需上传 CA Certificate。
        • 此时,MySQL 服务器会出示证书证明身份,平凯数据库云服务会用 CA 验证服务器证书。
        • CA 证书可防止中间人攻击,且当 MySQL 服务器以 require_secure_transport = ON 启动时为必需。
      • 选项 2:客户端证书认证

        • 如果 MySQL 服务器配置了客户端证书认证,需上传 Client Certificate 和 Client private key。
        • 此时,平凯数据库云服务会向 MySQL 服务器出示证书,但不会验证 MySQL 服务器的证书。
        • 该选项通常用于 MySQL 服务器配置了 REQUIRE SUBJECT '...' 或 REQUIRE ISSUER '...',但未配置 REQUIRE X509,允许仅校验客户端证书的特定属性而无需完整 CA 验证。
        • 该配置常用于自签名或自建 PKI 环境下的客户端证书认证。注意此配置易受中间人攻击,不推荐在生产环境使用,除非有其他网络级别的安全保障。
      • 选项 3:双向 TLS(mTLS)- 最高安全级别

        • 如果 MySQL 服务器配置了双向 TLS(mTLS)认证,需上传 CA Certificate、Client Certificate 和 Client private key。
        • 此时,MySQL 服务器通过客户端证书验证平凯数据库云服务身份,平凯数据库云服务通过 CA 证书验证 MySQL 服务器身份。
        • 当 MySQL 服务器为迁移用户配置了 REQUIRE X509 或 REQUIRE SSL 时,必须使用此选项。
        • 该选项适用于 MySQL 服务器要求客户端证书认证的场景。
        • 证书可通过以下方式获取:
          • 从云厂商下载(见 TLS 证书链接)。
          • 使用组织内部 CA 证书。
          • 自签名证书(仅限开发/测试环境)。
  3. 填写目标连接信息。

    • User Name:输入目标平凯数据库云服务 Essential 实例的用户名。
    • Password:输入该用户的密码。
  4. 点击 Validate Connection and Next 验证所填信息。

  5. 根据提示信息进行操作:

    如果使用 Public IP,需要将数据迁移服务的 IP 地址加入源数据库和防火墙(如有)的 IP 访问列表。

第 3 步:选择迁移任务类型

在 Choose migration job type 步骤,你可以选择迁移现有数据和增量数据,或仅迁移增量数据。

迁移现有数据和增量数据

如需一次性将数据迁移到平凯数据库云服务,选择 Full + Incremental 和 Incremental data migration,以保证源库和目标库数据一致性。

目前仅支持使用 逻辑模式 迁移 现有数据。该模式将 MySQL 源数据库数据导出为 SQL 语句并在 TiDB 上执行。在此模式下,目标表可以为空表或非空表。

仅迁移增量数据

如只需将源数据库的增量数据迁移到平凯数据库云服务,选择 Incremental data migration。此时,迁移任务不会迁移源数据库的现有数据,仅迁移任务明确指定的源数据库实时变更。

关于增量数据迁移的详细操作,请参见使用数据迁移将 MySQL 兼容数据库的增量数据迁移到平凯数据库云服务。

第 4 步:选择要迁移的对象

  1. 在 Choose Objects to Migrate 页面,选择要迁移的对象。你可以点击 All 选择全部对象,或点击 Customize,再勾选对象名称旁的复选框选择对象。

    • 点击 All 时,迁移任务会将整个源数据库实例的现有数据迁移到平凯数据库云服务,并在全量迁移后同步实时变更(前提是上一步已勾选 Existing data migration 和 Incremental data migration)。
    • 点击 Customize 并选择部分数据库时,迁移任务会将所选数据库的现有数据和实时变更迁移到平凯数据库云服务(前提是上一步已勾选 Existing data migration 和 Incremental data migration)。
    • 点击 Customize 并选择某数据库下的部分表时,迁移任务只会迁移所选表的现有数据和实时变更。后续在同一数据库中新建的表不会被迁移。
  2. 点击 Next。

第 5 步:前置检查

在 Precheck 页面,你可以查看前置检查结果。如检查失败,请根据 Failed 或 Warning 详情解决问题,然后点击 Check again 重新检查。

如仅有部分检查项为警告,你可评估风险后选择是否忽略警告。若全部警告被忽略,迁移任务会自动进入下一步。

关于错误及解决方法,参见 前置检查错误及解决方案。

关于前置检查项说明,参见 Migration Task Precheck。

如所有检查项均为 Pass,点击 Next。

第 6 步:查看迁移进度

迁移任务创建后,你可以在 Migration Job Details 页面查看迁移进度。进度会显示在 Stage and Status 区域。

你可以在任务运行期间暂停或删除迁移任务。

如迁移任务失败,解决问题后可恢复任务。

任何状态下均可删除迁移任务。

如迁移过程中遇到问题,请参见 迁移错误及解决方案。