本文为您介绍实时同步的相关问题。

文档概述

问题分类 相关文档
实时同步任务配置须知
实时同步MySQL数据常见问题 实时同步MySQL数据源的数据时,一开始读到数据,一段时间后无法读到数据,怎么处理?
实时同步至Oracle、PolarDB、MySQL常见问题 实时同步Oracle、PolarDB、MySQL任务重复报错
报错信息与解决方案 报错信息与解决方案
  • 实时同步Kafka数据报错: Startup mode for the consumer set to timestampOffset, but no begin timestamp was specified.
  • 实时同步MySQL数据报错:
    • Cannot replicate because the master purged required binary logs.
    • MySQLBinlogReaderException
    • show master status' has an error!
    • parse.exception.PositionNotFoundException: can't find start position forxxx
  • 实时同步Hologres数据报错:permission denied for database xxx
  • 实时同步至MaxCompute数据报错:ODPS-0410051:invalid credentials-accessKeyid not found
  • 实时同步至Oracle报错:logminer doesn't init, send HeartbeatRecord

实时同步任务支持哪些数据源?

实时同步支持的数据源请参考文档:实时同步支持的数据源

实时同步任务为什么不建议使用公网?

实时同步任务使用公网时,会存在以下风险:
  • 网络可能不稳定,丢包等时常发生,影响同步性能。
  • 安全性不高。

实时同步字段格式问题

数据集成实时同步在同步MySQL、Oracle、Loghub和PolarDB类型的数据至DataHub或Kafka时,会在同步的目标端添加5个附加列,以进行元数据管理、排序去重等操作。详情请参见实时同步字段格式

为什么实时同步任务延迟较大?

当您在查询实时同步任务产出的表数据,发现数据未同步时,原因可能是实时同步任务出现延迟,您可以进入运维中心的 实时同步任务界面,查看任务的 业务延迟数值是否过大。详情请参见 实时同步任务延迟解决方案

若业务延迟较大,其可能原因如下:

报错现象 直接原因 解决方案
读端延迟大 源端数据量变更过多。

延迟突然增大,说明某一时间点源端数据量增加。

若源端数据更新快,数据量多,但同步延迟大,您可以:
  • 修改任务配置:您可以在源端数据库最大连接数许可范围内,基于同步库或表个数综合评估调整实时同步并发数。
    说明 并发设置上限为当前资源组支持的最大并发数。不同规格资源组支持的最大并发数或任务数不同,详情请参见: DataWorks资源组概述。设置并发时,源端若为RDS可结合数据库允许的最大连接数进行评估,LogHub可根据shard数来设置。
  • 升级资源组规格:当源端数据量增大,或者同步解决方案任务重新编辑过同步任务(将任务由读取单库单表变更为读取多库多表),导致当前资源组消耗不了当前同步数据量级,此时您可选择扩大资源组规格,资源组规格调整详情请参考:变更规格操作
同步起始位点设置较早。 若起始位点比较早,实时同步任务追平数据需要一定时间。
写端延迟大 目标数据库性能、负载等问题 当数据库负载较高时,单一的调整同步任务并发并不能解决问题,您需要联系数据库管理员寻求相关帮助。
读写端延迟大 使用公网同步,网络问题导致同步任务延迟。 公网同步无法保障实时同步时效性,建议您打通网络后通过内网同步数据。
说明 公网同步存在以下风险:网络可能不稳定,丢包等时常发生,影响同步性能,安全性不高。
若源端和目标端数据库性能差异较大或数据库负载较高,同样会导致延迟较大。 当数据库负载较高时,单一的调整同步任务并发并不能解决问题,您需要联系数据库管理员寻求相关帮助。

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

  1. 可在数据库执行以下命令,查看当前这个数据库实例正在写入的binlog文件。
    show master status 
  2. 对比日志中读到的binlog文件,在日志中搜journalName=MySQL-bin.000001,position=50,确认是否有数据写入数据库。
  3. 如果有数据在写入,但是binlog却没有往前推进,请联系DBA处理。

实时同步数据时,如何处理TRUNCATE?

实时同步支持TRUNCATE的,在增全量合并的时候会生效。如果选择忽略TRUNCATE,可能会导致进行实时数据同步时出现多的数据。

如何提高实时同步的速度和性能?

如果同步写入速度较慢,可以适当增加写入端并发数,调整JVM参数,JVM参数与同步库数量无关,和变更频率有关。在当前资源组机器允许情况下,内存给的越大,Full GC频率会越小,实时同步性能相应也会越高。 实时同步01 实时同步2

实时同步是否支持在界面运行?

实时同步不支持在DataWorks的界面上直接运行,您需要在配置好实时同步任务后,提交并发布实时同步节点后,进入生产环境运行该节点。详情请参见实时同步任务运维

实时同步MySQL数据源时速度为什么会变慢?

原因之一就是同步的binlog变多,因为binlog是实例级别,即便配置的同步任务只同步了表A,那么没有在任务中的表B、表C等如果发生变更,也会生成binlog,这些额外增加的binlog就会使同步处理的速度慢下来。

实时同步中选择单库与选择多库的内存占用模式为什么会有差异?

选择大于等于2个库时就进入了“整实例”实时同步的模式,此时资源的占用要高于2个单独只有一个库的实时任务。

实时同步Oracle、PolarDB、MySQL任务重复报错

  • 现象:实时同步任务重复报错。
    实时同步来源为Oracle、PolarDB、MySQL数据源时,默认不支持处理源端DDL消息,当进行除新建表以外的DDL变更时,实时任务将报错退出。断点续传情况下,可能存在源端未产生DDL消息,但同步仍然报错的情况。
    说明 为避免数据在某时间段内丢失或错乱,禁止使用 Rename命令将两列的名称互换。例如,将A列和B列的列名做了调换操作。
  • 原因:由于实时同步支持断点续传,为保障不丢失数据,在重启实时同步回溯位点时可能会往前回溯一部分数据,此过程可能导致之前的DDL消息再次被读取而再次报警。
  • 解决方案:
    1. 当源端产生DDL变更时,手动在目标端数据库进行相应的DDL变更。
    2. 启动实时同步任务并变更DDL消息处理策略,由出错改为忽略
      说明 由于断点续传还会订阅到该DDL事件,为了避免任务依然失败,所以暂时改为忽略。
    3. 停止实时同步任务并再次修改DDL消息处理策略,由忽略还原为出错,并再次重启实时同步任务。

报错信息与解决方案

Kafka实时同步报错: Startup mode for the consumer set to timestampOffset, but no begin timestamp was specified.

请重置启动位点。 实时同步报错-kafka

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的操作详情可参见步骤3:开启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 forxxx

同步未找到位点,请重置位点。

实时同步Hologres报错:permission denied for database xxx

实时同步Hologres数据时,需要在Hologres给当前操作用户Hologres实例的admin权限(需要有创建schema的权限),操作详情可参见Hologres权限模型概述

实时同步至MaxCompute报错:ODPS-0410051:invalid credentials-accessKeyid not found

当实时同步至MaxCompute默认数据源(一般为odps_first)时,默认使用临时AK进行同步,临时AK超过7天会自动过期,同时,将导致任务运行失败。平台检测到临时AK导致任务失败时会自动重启任务,如果任务配置了该类型的监控报警,您将会收到报警信息。

实时同步至Oracle报错:logminer doesn't init, send HeartbeatRecord

实时同步至Oracle任务在初始化找合适的同步位点时,需要加载上一份归档的日志,如果归档日志较大,则需要加载3~5分钟才会完成初始化init阶段。