MySQL输入基于Binlog实时订阅的方式,实时读取您配置的MySQL数据库表数据。本文为您介绍,如何配置MySQL输入,以及配置输入之前需要准备的网络环境及账号权限。
前提条件
配置MySQL输入之前,请确保已完成以下规划与准备工作。
已配置同步账号权限,详情请参见配置账号权限。
实时同步通过数据源配置账号访问MySQL,在实时同步场景下,您需要确保此账号拥有数据库的
SELECT
、REPLICATION SLAVE
、REPLICATION CLIENT
权限。已开启MySQL Binlog服务,详情请参见开启MySQL Binlog。
数据集成通过实时订阅MySQL Binlog实现增量数据实时同步,您需要在DataWorks配置同步任务前,先开启MySQL Binlog服务。
已购买合适规格的独享数据集成资源组。详情请参见新增和使用独享数据集成资源组。
已配置数据同步资源组与数据库的网络连通,详情请参见网络连通方案。
使用限制
数据集成不支持同步MySQL只读库实例的数据。
DataWorks的数据集成实时同步MySQL数据是基于实时订阅MySQL实现的,实时同步MySQL数据目前仅支持配置MySQL数据源为RDS的
5.x
或8.x
版本的MySQL,如果需要同步DRDS的MySQL,请不要将DRDS的MySQL配置为MySQL数据源,您可以参考配置DRDS数据源文档直接将其配置为DRDS数据源。不支持Functional index。
配置MySQL输入
进入数据开发页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据开发。
鼠标悬停至
图标,单击 。
您也可以展开业务流程,右键单击目标业务流程,选择
。在新建节点对话框中,选择同步方式为单表(Topic)到单表(Topic)ETL,输入名称,并选择路径。
单击确认。
在实时同步节点的编辑页面,单击 并拖拽至编辑面板。
单击MySQL节点,在节点配置对话框中,配置各项参数。
参数
描述
数据源
选择已经配置好的MySQL数据源,此处仅支持MySQL数据源。
如果未配置数据源,请单击右侧的新建数据源,进入
页面进行新建。表
选择当前数据源下需要同步的表名称。您可以单击右侧的数据预览进行确认。
您可以实现分库分表的场景,配置的库和表会在该任务中同时进行实时同步。
重要分库分表中的数据表的Schema(即表结构,包含字段数量、字段类型、字段名称、字段顺序)请保持一致,以避免执行报错。
输出字段
选择需要同步的字段,包括管理字段和数据字段:
管理字段:为方便进行数据管理、排序和去重等操作,会在同步的目标端自动添加附加字段。
数据字段:显示要同步的原始表中对应的字段。
详情请参见实时同步字段格式。
MySQL节点支持分库分表,您可以单击添加分库分表数据源,从下拉列表中选择相应的数据源和表,添加多个数据源,同时进行同步。
单击工具栏中的
图标。
常见问题
实时同步MySQL数据源的数据时,一开始读到数据。一段时间后无法读到数据,怎么处理?
可在数据库执行以下命令,查看当前这个数据库实例正在写入的binlog文件。
show master status
对比日志中读到的binlog文件,在日志中搜
journalName=MySQL-bin.000001,position=50
,确认是否有数据写入数据库。如果有数据在写入,但是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记录,请检查您MySQL的binlog保留时间,同步任务启动时请将该位点配置在这个时间范围内。如果您订阅不到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的操作详情可参见开启MySQL的Binlog。
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完全一致的多表进行实时同步。