跳到主要内容

MySQL 迁移同步到 Redshift

NineData 数据复制支持 MySQL 到 Redshift 数据源之间的全量数据同步和增量数据同步。

功能介绍

NineData 数据复制支持数据源之间的结构、全量数据、增量数据的高性能复制,对于部分数据源,还提供双向复制功能,实现快捷构建异地多活业务架构。

  • 结构:支持同构及异构数据源之间的对象结构复制,很大程度上降低了两个数据源之间的数据复制门槛。
  • 全量数据:通过智能数据分片实现行级并发批量复制能力,有效保障复制性能。自主研发的新型断点续传技术,保证无主键表的数据准确性。
  • 增量数据:支持全对象类型的 DML|DDL 增量数据复制,结合行级并发、热点合并等技术,提供强劲复制性能。
  • 双向数据实时复制:直接多个节点之间的数据双向复制,保证所有节点的数据均保持最新状态。

通过以上功能,可以轻松高效地实现全量|增量数据复制全量|增量数据迁移全量|增量数据同步数据集成不停机无缝迁移等场景,为企业提供灵活和可靠的数据复制解决方案。

前提条件

  • 已将源数据源和目标数据源添加至 NineData。如何添加,请参见添加数据源

  • 源的数据库类型为 MySQL 或类 MySQL 数据库,例如 MySQL、MariaDB、PolarDB MySQL、TDSQL-C、GaussDB MySQL、Aurora 等。

  • 目标数据库为 Redshift provisioned cluster、Redshift Serverless。

  • 增量复制的情况下,源数据源必须开启 Binlog,并且 Binlog 相关参数设置如下:

    • binlog_format=ROW
    • binlog_row_image=FULL
    提示

    如果源数据源为备库,为保证获取完整的 Binlog 日志,还需要开启 log_slave_updates 参数。

使用限制

  • 增量复制过程暂不支持同步源端的 DDL 操作。
  • 当前暂不支持结构复制,您需要手动在目标端创建与源端同步对象一致的表。MySQL 和 Redshift 的数据类型映射关系,请参见附录 1
  • 数据复制功能仅针对数据源中的用户数据库,系统库不会被复制。例如:MySQL 类型数据源中的 information_schemamysqlperformance_schemasys 库不会被复制。
  • 源数据源的账号必须拥有复制对象的 SELECTREPLICATION CLIENTREPLICATION SLAVE 权限(增量复制),目标数据源的账号必须拥有 DML 权限。
  • 执行数据同步前需评估源数据源和目标数据源的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源数据源和目标数据源一定的读写资源,导致数据库负载上升。
  • 建议确保同步对象中的每张表都有主键或唯一约束、列名具有唯一性,否则可能会重复同步相同数据。

操作步骤

商业化通知

NineData 数据复制产品已商业化,您仍然可以保有 10 条复制任务免费使用,注意事项如下:

  • 10 条复制任务中可以包含 1 条任务,规格为 Micro
  • 状态为的任务不算在 10 条任务的限制内,如果您已经创建了 10 条复制任务,还想要继续创建,可以先终止之前的复制任务,然后再创建新任务。
  • 创建复制任务时,仅可选择您已购买的,未购买的规格将以灰度显示,无法选择。如需购买,请通过页面右下角的客服图标联系我们。
  1. 登录 NineData 控制台

  2. 在左侧导航栏单击 >

  3. 页面,单击右上角的

  4. 页签,按照下表进行配置,并单击

    参数
    说明
    输入数据同步任务的名称,为了方便后续查找和管理,请尽量使用有意义的名称。最多支持 64 个字符。
    同步对象所在的数据源。
    接收同步对象的数据源。
    选择需要复制到目标数据源的内容。
    • :同步源数据源的所有对象和数据,即全量数据复制。
    • :在全量同步完成后,基于源数据源的日志进行增量同步。单击setting图标,可以根据需求取消勾选某一些操作类型,取消勾选后,这些操作会在增量同步中被忽略。
    IAM Role拥有在 Redshift 中执行命令权限的 IAM Role。在复制过程中,NineData 会先将 MySQL 数据拷贝到 NineData 的 Amazon S3 服务,再从 S3 拷贝到您的 Redshift。该 Role 用于授权 NineData 在您的 Redshift 中执行拷贝命令将数据从 S3 复制到 Redshift。IAM Role 的获取方式,请参见页面中的
    仅为时需要选择。
    • :以当前复制任务开始时间为基准,进行增量复制。
    • :选择增量复制开始的时间点,您可以根据您的业务所在地域按需选择时区。
    • :预检查阶段检测到目标表中存在数据时,停止任务。
    • :预检查阶段检测到目标表中存在数据时,忽略该部分数据,追加写入其他数据。
    • :预检查阶段检测到目标表中存在数据时,删除该部分数据,重新写入。
  5. 页签,配置下列参数,然后单击

    参数
    说明
    选择需要复制的内容,您可以选择复制源库所有内容,也可以选择,在列表中选中需要复制的内容,单击>添加到右侧列表。
    (可选)单击增加一条黑名单记录,选择需要加入黑名单的库或对象,这些内容都不会被复制。用于在的全库复制或复制中排除某些库或对象。
    • 左侧下拉框:选择需要加入黑名单的库名。
    • 右侧下拉框:选择对应库中的对象,您可以单击多个对象进行多选,留空则将整个数据库加入黑名单。
    如果要将多个库加入黑名单,您可以单击下方的添加按钮增加一行。

    image-20230828190610770

  6. 页签,系统默认匹配目标数据源中的同名 Schema,如果不存在,则需要手动选择目标 Schema。默认情况下,要求目标库中的表名、列名需要和同步对象一致。如果不一致,您也可以手动进行表名和列名的映射。配置完成后,单击保存并预检查

    image-20230828200833508

  7. 页签,等待系统完成预检查,预检查通过后,单击

    提示
    • 如果预检查未通过,需要单击目标检查项右侧列的,排查失败的原因,手动修复后单击重新执行预检查,直到通过。
    • 的检查项,可视具体情况修复或忽略。
  8. 页面,提示,同步任务开始运行。此时您可以进行如下操作:

    • 单击查看同步任务各个阶段的执行情况。
    • 单击可以返回任务列表页面。

查看同步结果

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击 >

  3. 页面单击目标同步任务的,页面说明如下。

    redshift_result

    序号
    功能
    说明
    1同步延迟源数据源和目标数据源之间的数据同步延迟,0 秒表示两端之间没有延迟,此时您可以选择将业务切换到目标数据源,实现平滑迁移。
    2配置告警配置告警后,系统会在任务失败时通过您选择的方式通知您。更多信息,请参见运维监控简介
    3更多
    • 暂停:暂停任务,仅状态为运行中的任务可选。
    • 终止:结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启任务,请谨慎操作。如果同步对象中包含触发器,会弹出触发器复制选项,请按需选择。
    • 删除:删除任务,任务删除后无法恢复,请谨慎操作。
    4全量复制(包含全量复制的场景下显示)展示全量复制的进度和详细信息。
    • 单击页面右侧的监控:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的限流设置,限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的日志:查看全量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    5增量复制(包含增量复制的场景下显示)展示增量复制的各项监控指标。
    • 单击页面右侧的:查看当前复制任务正在执行中的操作,包含:
      • :复制任务分多个线程执行复制操作,展示当前进行中的线程号。
      • :当前线程正在执行中的 SQL 语句详情。
      • :当前线程的响应时间,如果该数值变大,则代表当前线程可能由于某些原因卡住。
      • :当前线程开启的时间戳。
      • :当前线程的状态。
    • 单击页面右侧的限流设置:限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的日志:查看增量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    6修改对象展示同步对象的修改记录。
    • 单击页面右侧的修改同步对象,可对同步对象进行配置
    • 单击页面右侧的refresh:查看最新的信息。
    7展开展示当前复制任务的详细信息,包括复制类型复制对象开始时间等。

附录 1:MySQL 和 Redshift 数据类型的映射关系表

数据复制过程中,MySQL 的数据类型会被映射成对应的 Redshift 数据类型。

类别MySQL 数据类型Redshift 数据类型
NumericTINYINTSMALLINT
TINYINT UNSIGNEDSMALLINT
SMALLINTSMALLINT
SMALLINT UNSIGNEDINTEGER
MEDIUMINTINTEGER
MEDIUMINT UNSIGNEDBIGINT
INTINTEGER
INT UNSIGNEDBIGINT
BIGINTBIGINT
BIGINT UNSIGNEDBIGINT
BIT(M)BOOL
DecimalDecimal
NumericNumeric
FloatREAL
DoubleREAL
BOOL,BOOLEANBOOL
DATE AND TIMEDATEDATE
DATETIME[(fsp)]timestamp
Timestamp[(fsp)]timestamptz
Time[(fsp)]time
YEAR[(4)]INT
STRINGCHARCHAR
VARCHARVARCHAR
BINARY/VARBINARYVARBINARY
TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXTVARCHAR
TINYBLOB/BLOB/MEDIUMBOLB/LONGBLOBVARBINARY
ENUMVARCHAR
SETVARCHAR
JSONJSONVARCHAR

附录 2:预检查项一览

检查项检查项说明未通过是否阻止任务继续失败原因及修复策略
源数据源连接测试检测源数据源的连通性
  • 失败原因:NineData 与源数据库之间的连接不通。
  • 修复方法:
    • 自建数据库:请检查数据库是否配置防火墙,确认是否放开 NineData 的服务 IP。
    • ECS 自建数据库:请确认数据源所在 ECS 实例的安全组设置,是否允许 NineData 服务 IP 的访问。如果不允许,修改安全组放开 NineData IP 后,重新预检查。
    • 云数据库:请确认云数据库的安全组|白名单设置,是否允许 NineData 服务 IP 的访问。如果不允许,可以修改安全组|白名单放开 NineData IP 后,重新预检查。
    • JDBC 连接失败:请确认数据库的账号密码是否有误。如果有误,请先调整数据源配置后,重新预检查。
目标数据源连接测试检测目标数据源的连通性
  • 失败原因:NineData 与目标数据源之间的连接不通。
  • 修复方法:
    • 云数据库:请确认云数据库的安全组|白名单设置,是否允许 NineData 服务 IP 的访问。如果不允许,可以修改安全组|白名单放开 NineData IP 后,重新预检查。
    • JDBC 连接失败:请确认数据库的账号密码是否有误。如果有误,请先调整数据源配置后,重新预检查。
源数据源权限检测检测源数据源的账号权限
  • 失败原因:源数据库权限不足。
  • 修复方法:为源数据源的账号赋予 SELECT、REPLICATION CLIENT、REPLICATION SLAVE 权限,并重新预检查。
目标数据源权限检测检测目标数据源的账号权限
  • 失败原因:目标数据库权限不足。
  • 修复方法:为目标数据源的账号赋予 CREATE/ALTER/DROP TABLE、SELECT、INSERT、UPDATE、DELETE、REFERENCES、CREATE、TEMPORARY 和 USAGE 权限,并重新预检查。
源数据库是否开启 Binlog检查源数据库是否开启 Binlog
  • 失败原因:您的源数据库未开启 Binlog。
  • 修复方法:将 Binlog 打开后,重新进行预检查。
源数据库 binlog format 是否支持 row 模式检查源数据库的 binlog 格式是否为 row
  • 失败原因:您的源数据库的 binlog format 不为 row 模式。
  • 修复方法:请参考 MySQL 官方文档修改后,重新进行预检查。
binlog_row_image 是否为 full检查源数据库的 binlog_row_image 是否为 full
  • 失败原因:您的源数据库 binlog_row_image 不为 full。
  • 修复方法:请参考 MySQL 官方文档修改后,重新进行预检查。
同名对象存在性检查检查目标是否存在跟待复制对象同名的对象
  • 是:当同名对象处理策略选择为“预检查报错并停止任务”。
  • 否:其他情况。
  • 失败原因:目标数据源中存在同名对象。
  • 修复方法:
    • 修改同名对象处理策略后重新预检查。
    • 删除同名对象后重新预检查。
数据存在性检查检查目标数据源的复制对象是否已经存在数据
  • 是:当同名对象处理策略为“预检查报错并停止任务”。
  • 否:其他情况。
  • 失败原因:目标数据源中存在相同数据。
  • 修复方法:
    • 修改存量数据处理策略后重新执行预检查。
    • 手动清空目标数据源的存量数据后重新执行预检查。

相关文档

数据复制简介