配置MySQL输入

MySQL输入基于Binlog实时订阅的方式,实时读取您配置的MySQL数据库表数据。本文为您介绍,如何配置MySQL输入,以及配置输入之前需要准备的网络环境及账号权限。

前提条件

配置MySQL输入之前,请确保已完成以下规划与准备工作。

  • 已配置同步账号权限,详情请参见配置账号权限

    实时同步通过数据源配置账号访问MySQL,在实时同步场景下,您需要确保此账号拥有数据库的SELECTREPLICATION SLAVEREPLICATION CLIENT权限。

  • 已开启MySQL Binlog服务,详情请参见开启MySQL Binlog

    数据集成通过实时订阅MySQL Binlog实现增量数据实时同步,您需要在DataWorks配置同步任务前,先开启MySQL Binlog服务。

  • 已购买合适规格的独享数据集成资源组。详情请参见新增和使用独享数据集成资源组

  • 已配置数据同步资源组与数据库的网络连通,详情请参见网络连通方案

使用限制

  • 数据集成不支持同步MySQL只读库实例的数据。

  • DataWorks的数据集成实时同步MySQL数据是基于实时订阅MySQL实现的,实时同步MySQL数据目前仅支持配置MySQL数据源为RDS5.x8.x版本的MySQL,如果需要同步DRDSMySQL,请不要将DRDSMySQL配置为MySQL数据源,您可以参考配置DRDS数据源文档直接将其配置为DRDS数据源。

  • 不支持Functional index。

配置MySQL输入

  1. 进入数据开发页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与运维 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

  2. 鼠标悬停至新建图标,单击新建节点 > 数据集成 > 实时同步

    您也可以展开业务流程,右键单击目标业务流程,选择新建节点 > 数据集成 > 实时同步

  3. 新建节点对话框中,选择同步方式单表(Topic)到单表(Topic)ETL,输入名称,并选择路径

  4. 单击确认

  5. 在实时同步节点的编辑页面,单击输入 > MySQL并拖拽至编辑面板。

  6. 单击MySQL节点,在节点配置对话框中,配置各项参数。

    输入

    参数

    描述

    数据源

    选择已经配置好的MySQL数据源,此处仅支持MySQL数据源。

    如果未配置数据源,请单击右侧的新建数据源,进入工作空间配置 > 数据源页面进行新建。

    选择当前数据源下需要同步的表名称。您可以单击右侧的数据预览进行确认。

    您可以实现分库分表的场景,配置的库和表会在该任务中同时进行实时同步。

    重要

    分库分表中的数据表的Schema(即表结构,包含字段数量、字段类型、字段名称、字段顺序)请保持一致,以避免执行报错。

    输出字段

    选择需要同步的字段,包括管理字段数据字段

    • 管理字段:为方便进行数据管理、排序和去重等操作,会在同步的目标端自动添加附加字段。

    • 数据字段:显示要同步的原始表中对应的字段。

    详情请参见实时同步字段格式

    MySQL节点支持分库分表,您可以单击添加分库分表数据源,从下拉列表中选择相应的数据源,添加多个数据源,同时进行同步。

  7. 单击工具栏中的保存图标。

常见问题

  • 实时同步MySQL数据源的数据时,一开始读到数据。一段时间后无法读到数据,怎么处理?

    1. 可在数据库执行以下命令,查看当前这个数据库实例正在写入的binlog文件。

      show master status 
    2. 对比日志中读到的binlog文件,在日志中搜journalName=MySQL-bin.000001,position=50,确认是否有数据写入数据库。

    3. 如果有数据在写入,但是binlog却没有往前推进,请联系DBA处理。

  • MySQL实时同步报错Cannot replicate because the master purged required binary logs.

    • 解答:MySQL实时同步报错:Cannot replicate because the master purged required binary logs. Replicate the missing transactions from elsewhere, or provision a new slave from backup.时,可能是因为在MySQL未找到消费位点的binlog记录,请检查您MySQLbinlog保留时间,同步任务启动时请将该位点配置在这个时间范围内。如果您订阅不到binlog,可以尝试重置位点到当前时间。

  • MySQL实时同步报错MySQLBinlogReaderException

    • 解答:MySQL实时同步报错:MySQLBinlogReaderException: The database you are currently syncing is the standby database, but the current value of log_slave_updates is OFF, you need to enable the binlog log update of the standby database first. 时,可能是因为备库没有开启binlog,如果您要同步备库,需要做备库级联开启binlog,可以找DBA寻求帮助。

      开启binlog的操作详情可参见开启MySQLBinlog

  • MySQL实时同步报错show master status' has an error!

    • 解答:MySQL实时同步报错:show master status' has an error!,报错详情为Caused by: java.io.IOException: message=Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation, with command: show master status时,可能是因为数据源没有开启对应数据库的权限。

      数据源配置账号需要拥有数据库的SELECT、REPLICATION SLAVE、REPLICATION CLIENT权限。给数据源添加数据库对应权限的操作详情可参见步骤2:创建账号并配置权限

  • MySQL实时同步报错parse.exception.PositionNotFoundException: can't find start position for xx

    • 解答:同步未找到位点,请重置位点。

  • MySQL实时同步报错:数据库位点过期,请重新选择位点,源库可用最早位点xxx。

    • 重置位点:在启动实时同步任务时,重置位点并选择源库可用的最早位点。

    • 调整Binlog保留时间:如果数据库位点过期,可以考虑在MySQL数据库中调整Binlog的保留时间,例如设置为7天。

    • 数据同步:如果数据已经丢失,可以考虑重新全量同步,或者配置一个离线同步任务来手动同步丢失的数据。

  • 实时同步是否支持将单库多表的不同字段进行合并?比如A表为a、b字段,B表为a、c字段,同步之后为a、b、c字段?

    • 不支持。只支持Schema完全一致的多表进行实时同步。