跳到主要内容

MySQL 到 MySQL 迁移:同构迁移与增量同步 | NineData

MySQL 版本升级、数据中心迁移、云迁移、实例替换或其他同构 MySQL 迁移项目可使用此工作流。NineData 可以执行全量迁移和增量同步,以便在切换前校验目标数据库,并缩短最终停机时间窗口。

概述​

NineData 数据复制支持在数据源之间复制结构、全量数据和增量数据。对于支持的数据源,也支持双向复制,可用于异地多活架构。

  • 结构复制:在同构和异构数据源之间复制对象结构。
  • 全量数据复制:通过数据分片和行级并发批量复制提高吞吐量。断点续传有助于保证数据准确性,包括没有主键的表。
  • 增量数据复制:为受支持的对象类型复制 DML 和 DDL 变更。行级并发和热点合并处理有助于保持复制吞吐量。
  • 双向实时数据复制(仅限 MySQL 实例之间):在节点之间双向复制变更,使参与节点的数据保持最新。

这些能力可用于全量或增量数据复制、迁移、同步、数据集成和低停机迁移工作流。

开始之前​

  • 将源端和目标端数据源添加到 NineData。有关操作说明,请参见添加数据源。

  • 使用受支持的源端和目标端 MySQL 版本。源端版本必须小于或等于目标端版本。

    源数据源目标数据源
    MySQL 8.0MySQL 8.0
    MySQL 5.7MySQL 8.0、5.7
    MySQL 5.6MySQL 8.0、5.7、5.6
    MySQL 5.5MySQL 8.0、5.7、5.6、5.5
    MySQL 5.1MySQL 8.0、5.7、5.6、5.5、5.1
  • 对于增量复制,在源数据源上启用 Binlog 并设置以下参数:

    • binlog_format=ROW

    • binlog_row_image=FULL

      提示

      如果源数据源是副本,请启用 log_slave_updates,以便 NineData 捕获完整的 Binlog 事件。

限制​

  • 复制仅作用于数据源中的用户数据库。不会复制 information_schema、mysql、performance_schema 和 sys 等 MySQL 系统数据库。
  • 对于结构和全量复制,源账号必须具有复制对象的 SELECT 权限;对于视图复制,源账号必须具有 SHOW VIEW 权限;对于增量复制,源账号必须具有 REPLICATION CLIENT 和 REPLICATION SLAVE 权限。目标账号必须具有 DML 和 DDL 权限。
  • 同步前评估源端和目标端的性能。尽量在业务低峰期运行任务,因为全量初始化会占用两端的读写资源。
  • 如果源端包含视图、函数、存储过程、触发器或事件,同步后的对象定义会使用目标数据源所配置账号作为 DEFINER。
  • 每张待复制的表都必须有主键或唯一约束,且列名必须唯一;否则可能复制出重复行。
  • 如果源端包含触发器,NineData 会在增量同步完成后同步触发器。

操作步骤​

  1. 登录 NineData 控制台。

  2. 在导航菜单中单击 数据复制。

  3. 在 数据复制 页面中,单击 创建复制。

  4. 在 数据源与目标 页签中配置下表字段,然后单击 下一步。

    参数
    描述
    任务名称输入有意义的任务名称,便于之后搜索和管理。最多支持 64 个字符。
    源数据源选择包含待复制对象的 MySQL 数据源。
    目标数据源选择用于接收复制对象的 MySQL 数据源。
    复制方式选择 单向复制。
    复制类型选择要复制到目标数据源的内容。若要迁移并持续同步,请选择 结构复制、全量复制 和 增量复制。单击 设置 图标可打开增量操作类型设置。清除不希望在增量同步期间复制的操作类型。
    目标库同名对象处理策略(选择 结构复制 时必填)选择 NineData 如何处理同名对象冲突。
    • 预检查报错并停止任务:预检查检测到同名表时停止任务。
    • 跳过并继续任务:收到提示后继续任务。结构复制时跳过同名表。如果同时启用了数据复制,则向该同名表追加数据,不覆盖已有数据。
    • 删除对象并重建:收到提示后继续任务。结构复制时,删除目标数据库中的同名表,并根据源端重新创建表结构。如果同时启用了数据复制,则在结构复制完成后写入数据。
    • 保留结构并清空数据,再覆盖写入(同时选择结构和数据复制时可选):收到提示后继续任务。结构复制时保留目标表结构;数据复制开始时清空同名表中的数据,然后重新复制源表数据。
  5. 在 选择复制对象 页签中配置以下参数,然后单击 下一步。

    参数
    描述
    复制对象选择要复制的内容。选择 全部实例 可复制源数据库中的所有内容;或选择 自定义对象,在 源对象 列表中选择对象,然后单击 > 将其移至 目标对象 列表。
    黑名单(可选)单击 添加 添加黑名单记录。选择要从复制中排除的数据库或对象。使用 自定义对象 或 全实例 复制时,可通过此选项排除特定数据库或对象。
    • 左侧下拉列表:选择要加入黑名单的数据库。
    • 右侧下拉列表:选择所选数据库中的对象。可多选。留空则将整个数据库加入黑名单。
    如需将多个数据库加入黑名单,请再次单击 添加。
  6. 在 配置映射 页签中配置目标表名称,然后单击 保存并预检查。如果映射期间源端或目标端的元数据发生变化,请单击 刷新元数据 刷新两端元数据。

    提示

    单击 映射与过滤 可自定义目标列名称。使用比较表达式设置 数据过滤条件。只有符合筛选条件的行会复制到目标端。例如,筛选条件为 emp_no>=10005 时,emp_no 小于 10005 的行不会复制到目标端。

  7. 在 "预检查" 页签中等待 NineData 完成预检查。预检查通过后,单击 启动任务。

  8. 在 启动任务 页面中,出现 启动成功 消息后,同步任务即开始运行。然后:

    • 单击 查看详情 查看各个复制阶段。
    • 单击 返回列表 返回 数据复制 任务列表。

结果​

任务启动后,监控各个复制阶段并查看任务详情。如果需要在业务切换前验证一致性,请运行数据对比。当增量延迟达到 0 秒且校验通过后,根据切换计划切换应用流量。