MySQL 到 MySQL 迁移:同构迁移与增量同步 | NineData
MySQL 版本升级、数据中心迁移、云迁移、实例替换或其他同构 MySQL 迁移项目可使用此工作流。NineData 可以执行全量迁移和增量同步,以便在切换前校验目标数据库,并缩短最终停机时间窗口。
概述
NineData 数据复制支持在数据源之间复制结构、全量数据和增量数据。对于支持的数据源,也支持双向复制,可用于异地多活架构。
- 结构复制:在同构和异构数据源之间复制对象结构。
- 全量数据复制:通过数据分片和行级并发批量复制提高吞吐量。断点续传有助于保证数据准确性,包括没有主键的表。
- 增量数据复制:为受支持的对象类型复制 DML 和 DDL 变更。行级并发和热点合并处理有助于保持复制吞吐量。
- 双向实时数据复制(仅限 MySQL 实例之间):在节点之间双向复制变更,使参与节点的数据保持最新。
这些能力可用于全量或增量数据复制、迁移、同步、数据集成和低停机迁移工作流。
开始之前
将源端和目标端数据源添加到 NineData。有关操作说明,请参见添加数据源。
使用受支持的源端和目标端 MySQL 版本。源端版本必须小于或等于目标端版本。
源数据源 目标数据源 MySQL 8.0 MySQL 8.0 MySQL 5.7 MySQL 8.0、5.7 MySQL 5.6 MySQL 8.0、5.7、5.6 MySQL 5.5 MySQL 8.0、5.7、5.6、5.5 MySQL 5.1 MySQL 8.0、5.7、5.6、5.5、5.1 对于增量复制,在源数据源上启用 Binlog 并设置以下参数:
binlog_format=ROWbinlog_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 会在增量同步完成后同步触发器。
操作步骤
登录 NineData 控制台。
在导航菜单中单击 数据复制。
在 数据复制 页面中,单击 创建复制。
在 数据源与目标 页签中配置下表字段,然后单击 下一步。
参数 描述 任务名称 输入有意义的任务名称,便于之后搜索和管理。最多支持 64 个字符。 源数据源 选择包含待复制对象的 MySQL 数据源。 目标数据源 选择用于接收复制对象的 MySQL 数据源。 复制方式 选择 单向复制。 复制类型 选择要复制到目标数据源的内容。若要迁移并持续同步,请选择 结构复制、全量复制 和 增量复制。单击 图标可打开增量操作类型设置。清除不希望在增量同步期间复制的操作类型。
目标库同名对象处理策略(选择 结构复制 时必填) 选择 NineData 如何处理同名对象冲突。 - 预检查报错并停止任务:预检查检测到同名表时停止任务。
- 跳过并继续任务:收到提示后继续任务。结构复制时跳过同名表。如果同时启用了数据复制,则向该同名表追加数据,不覆盖已有数据。
- 删除对象并重建:收到提示后继续任务。结构复制时,删除目标数据库中的同名表,并根据源端重新创建表结构。如果同时启用了数据复制,则在结构复制完成后写入数据。
- 保留结构并清空数据,再覆盖写入(同时选择结构和数据复制时可选):收到提示后继续任务。结构复制时保留目标表结构;数据复制开始时清空同名表中的数据,然后重新复制源表数据。
在 选择复制对象 页签中配置以下参数,然后单击 下一步。
参数 描述 复制对象 选择要复制的内容。选择 全部实例 可复制源数据库中的所有内容;或选择 自定义对象,在 源对象 列表中选择对象,然后单击 > 将其移至 目标对象 列表。 黑名单(可选) 单击 添加 添加黑名单记录。选择要从复制中排除的数据库或对象。使用 自定义对象 或 全实例 复制时,可通过此选项排除特定数据库或对象。 - 左侧下拉列表:选择要加入黑名单的数据库。
- 右侧下拉列表:选择所选数据库中的对象。可多选。留空则将整个数据库加入黑名单。
在 配置映射 页签中配置目标表名称,然后单击 保存并预检查。如果映射期间源端或目标端的元数据发生变化,请单击 刷新元数据 刷新两端元数据。
提示单击 映射与过滤 可自定义目标列名称。使用比较表达式设置 数据过滤条件。只有符合筛选条件的行会复制到目标端。例如,筛选条件为
emp_no>=10005时,emp_no小于10005的行不会复制到目标端。在 "预检查" 页签中等待 NineData 完成预检查。预检查通过后,单击 启动任务。
在 启动任务 页面中,出现 启动成功 消息后,同步任务即开始运行。然后:
- 单击 查看详情 查看各个复制阶段。
- 单击 返回列表 返回 数据复制 任务列表。
结果
任务启动后,监控各个复制阶段并查看任务详情。如果需要在业务切换前验证一致性,请运行数据对比。当增量延迟达到 0 秒且校验通过后,根据切换计划切换应用流量。