DTS常见报错的解决方法

DTS常见报错的解决方法

更新时间:2020-06-03 09:42:43

概述

在使用数据传输服务DTS过程中,可能会遇到各种报错信息,本文主要介绍在使用过程中常见错误信息的解决方法。

详细信息

如下为数据传输服务DTS在使用过程中常见错误解决方法,您可以通过返回的错误信息在本文匹配解决方案。

错误码 具体报错信息 问题原因 解决方案
DTS-002003 DTS-002003 Connect db failure, unknow db url xx.xx.xx.xx:xx, please vaild url. Original error: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

根据接入方式不同,可能的原因如下所示。

  • 自建库接入:数据库地址或端口填写错误,DTS到自建库的网络不通。
  • 专线接入:无法通过专线连接到数据库。

根据接入方式不同,解决方法如下所示。

  • 自建库接入:检查数据库地址或端口,测试填写的数据库地址或端口的连接性,请根据实际情况更正数据库地址。
  • 专线接入:测试专线连通性,如果是专线不通,请提交工单
DTS-002004 DTS-002004 Connect db xx.xx.xx.xx:xx failure, Unknow db user user_name, please vaild user. Original error: original_error. 创建DTS任务时使用的帐号不正确。 使用已经存在的帐号,或者创建新的帐号。
DTS-002005 DTS-002005 Connect db failure, db user user_name password xxxx incorrect, Please vaild user info. Original error: original_error. 创建DTS任务使用目标库帐号或密码错误。 验证账号密码是否正确,然后使用正确的帐号密码重新配置任务即可。
DTS-002006 DTS-002006 Connect db ip:port failure, db user user_name_xx no connect permission, Please vaild user info. Original error: original_error. 连接目标数据库所使用的帐号和密码错误。 使用正确的账号和密码连接目标数据库,验证是否可以正常连接。
DTS-002007 DTS-002007 Connect db failure, client IP xxx.xxx.xx.xx is not not allowed to connect Server server_name. Original error: original_error. DTS服务所使用的帐号不具备连接指定数据库的权限。 给相关账号授权或者更换为其他具备连接权限的数据库账号。
DTS-002008 DTS-002008 Connect db failure, unknow database name [$Database_name]. Original error: [$Original_error]. 创建DTS任务所使用的连接信息中数据库的名称错误。 检查数据库名称是否正确,如果不正确,则重新创建DTS任务或者更新任务配置。
DTS-002009 DTS-002009 Connect db xx.xx.xx.xx:xx timeout. Original error: original_error. 由于网络异常,导致新建数据库连接超时。 登录DTS控制台,重启失败的DTS任务尝试恢复。
DTS-002010 DTS-2010 Unknow connect db xx.xx.xx.xx:xx failure. Original error: original_error. DTS连接数据库失败,可能的原因如下。
  • 用户名或密码错误。
  • 白名单配置错误。
  • 网络存在异常。
  1. 请检查用户名密码是否正确。
  2. 请先将RDS的白名单配置成0.0.0.0/0
  3. 请联系网络工程师协助排查网路问题后重试。
DTS-1050002 DTS-1050002 MySQL binlog [$Position] is not exists. Original error: original_error.
  • 数据迁移任务暂停超过七天。
  • 源库的Binlog保留时间过短,导致日志被清理。
Binlog点位不存在的解决方法
DTS-1050003 DTS-150003 MySQL binlog timstamp 12345678 is not found on server. Original error: original_error.

根据报错信息可知,原因可能有以下两种。

  • 如果任务暂停超过7天,RDS日志被清理,需要重新创建任务。
  • 源库的Binlog保留时间过短,建议源库MySQL日志至少保留3天。

根据问题原因,解决方法如下。

  • 如果源数据库是自建MySQL数据库,则需要在自建数据库中恢复相应的Binlog文件。
  • 如果源数据库是RDS,直接提交工单即可。
DTS-1050004 DTS-002004 Connect db xx.xx.xx.xx:xx failure, Unknow db user user_name, please vaild user. Original error: original_error. 创建DTS任务时使用的帐号不正确。 使用已经存在的帐号,或者创建新的帐号。
DTS-1050005 DTS-1050005 MySQL table xx.xx binlog column count check error, local count is 21, but binlog count is 22, at offset 9198@111547. Binlog中待解析的日志对应表的表结构与DTS本地存储表的表结构不一致,导致Binlog解析失败。出现表结构跟DTS本地存储表结构不一致的原因主要有以下两种。
  • 原因一:该表之前进行表结构变更的DDL语句中,DTS解析失败被忽略跳过,未更新DTS本地存储的表结构。
  • 原因二:全量数据迁移或初始化过程中,源库业务进行过表结构变更。

给DTS源库帐号赋予整个information_schema的查询权限,有关授权操作请参考文档GRANT

注:如问题未解决,请提交工单说明最近执行的DDL,联系阿里云技术支持重新加载DTS本地存储的表结构。

DTS-1050007 DTS-002007 Connect db failure, client IP xxx.xxx.xx.xx is not not allowed to connect Server server_name. Original error: original_error. DTS服务所使用的帐号不具备连接指定数据库的权限。 给相关账号授权或者更换为其他具备连接权限的数据库账号。
DTS-1050008 DTS-1050008 MySQL local table db_name.table_name meta not found
  • DTS的DDL解析失败导致的数据字典更新错误。
  • DTS任务创建过程中源库触发对应DDL操作,导致DTS查询的Schema信息错误。
  • DTS的MySQL日志Reader解析Event存在Bug。
    注:该原因仅适用于代号DTS-1050008的错误。

给DTS源库帐号赋予整个information_schema的查询权限,有关授权操作请参考文档GRANT。重新执行之前的任务,确认问题已解决。

注:如问题未解决,请提交工单说明最近执行的DDL,联系阿里云技术支持协助解决。

DTS-1050009 DTS-1050009 MySQL binlog parse error, at offset filename@offset.
DTS-1050010 DTS-1050010 column db_name.table_name.column_name binlog parse error, at offset filename@offset.
  • DTS的DDL解析失败导致的数据字典更新错误。
  • DTS任务创建过程中源库发生了对应DDL,导致DTS查询的schema信息不对。
  • DTS连接MySQL数据库,MySQL日志Reader解析event存在BUG。
建议为DTS的源库帐号添加information_schema的查询权限。
DTS-1051001 DTS-1051001 Query remote MySQL instance xx.xx.xx.xx:xx table db_name.table_name meta fail. Original error: original_error. DTS查询表结构可能存在查询超时。

根据Java驱动报错内容定位原因,并解决。

注:如问题无法解决,请联系阿里云技术支持协助解决。

DTS-1051002 DTS-1051002 Current connect MySQL instance xx.xx.xx.xx:xx is not master. DTS的MySQL日志显示主实例验证失败,可能使用了从实例。 修改任务配置,使用MySQL主实例重新配置任务。
DTS-1051003 DTS-1051003 Found statement format binary, SQL: insert into table_name values(1,2,3). MySQL日志Reader binlog_format校验失败。 MySQL日志Reader binlog_format校验失败的解决方法
DTS-1051004 DTS-1051004 BEGIN and COMMIT middle have any other evetns, Please vaild binlog file. MySQL日志BEGIN和COMMIT中间没有有效的DML操作,如果源库使用RDS只读实例会出现该问题,原因是RDS只读实例没有Binlog,故无法做增量迁移和同步。 检查源库是否为RDS的只读实例,如果是只读实例需要使用非只读实例重新配置任务。
DTS-1051005 DTS-1051005 MySQL Server xx.xx.xx.xx:xx select binlog list is empty, Please use sql: SHOW BINARY LOGS; vaild binlog list. MySQL源库Binlog列表为空,可能未开启Binlog。

检查源库MySQL是否开启了Binlog,可以通过如下SQL语句查看对应的Binlog列表。如未开启Binlog,则请手动开启

SHOW BINARY LOGS;
DTS-1051006 DTS-1051006 MySQL Server [$IP]:[$Port], Table [$DB_Name].[$DB_table] is not exists. 使用DTS进行数据同步与数据订阅时,MySQL日志Reader会对源数据库的Binlog文件列表进行校验,如果近期发生过DDL变更,则可能会导致校验失败。 请检查该数据表的表结构是否有变动,若有变动,可在修复后重新进行DTS相关操作。如果问题无法解决,请提交该数据表的建表语句与近期执行的相关DDL语句,联系阿里云技术支持协助解决。
DTS-1051007 DTS-1051007 In binary log offset filename@offset(timestamp: unix_timestmap), found table db_name.table_name not full mode event. DTS服务连接MySQL只支持binlog_row_image='FULL' 模式的日志。 DTS连接MySQL的Reader日志binlog_row_image校验失败的解决方法
DTS-071007 DTS-071007: Schema matched failed
  • 执行的语句为rename tablecreate…selectalter table…rename..等语句,这些语句后面的表不在同步列表中。
  • 业务对目标实例进行过删表操作,导致表在目标实例中不存在。
数据同步时报某个表不存在的解决方法
创建数据迁移任务时,报“获取结构连接超时”错误。
  • 原因一:源数据库存在白名单限制,导致DTS服务器连接异常。
  • 原因二:您提供的迁移账号对应的主机名为localhost,导致DTS服务器不能远程连接。
创建数据迁移任务时报获取结构连接超时
使用DTS将其他阿里云账号下的RDS实例迁移到当前账号,在任务配置时报获取结构对象失败。

DTS连接源RDS实例失败,可能由如下两个原因造成。

  • 配置连接信息不正确。
  • RDS配置了白名单,并未对当前DTS添加相应规则。
  1. 参考跨阿里云账号迁移MongoDB实例跨阿里云账号迁移MySQL实例文档,确认连接信息的正确性。
  2. 参考RDS设置白名单,为当前DTS添加相应白名单规则。

配置Oracle到MySQL迁移任务时报“java.sql.SQLException: Io,异常: The Network Adapter could not establish the connection”错误

一般是由于数据传输服务连接不上源Oracle数据库。 当遇到此问题时,需要在Oracle安装服务器上执行netstat -ano命令,查看Oracle数据库的端口是否配置了内外网IP监听。如果没有配置,那么需要修改Oracle的监听服务,重启数据库服务后,重新创建迁移任务即可。
DTS数据订阅报“java.io.IOException: Parse message attribute failed”错误 DTS订阅通道只能查询最近24小时之内的数据,时间点不在该范围内就会报这个错误。 您可以修改DTS的消费时间点,如何修改消费时间点请参见修改消费时间点
使用DTS数据订阅时提示“Connection timed out”错误 SDK所使用的服务器设置了context.setUsePublicIp(false);参数。
  • 检查运行SDK服务器时是否设置了context.setUsePublicIp(false);,如果设置了,将其修改为context.setUsePublicIp(true);
  • 若同一个订阅任务启动多个Client,只有一个Client消费数据,则其他Client属于容灾状态。
failed to get master store addr for topic aliyun_sz_ecs_rdsr*y-1-0 订阅通道的消费时间点设置早于实际消费时间。 使用数据订阅SDK消费数据时报“failed to get master store addr for topic”错误
DTS启动订阅SDK时提示“get guid info failed” 这是由于您在SDK中设置的订阅通道ID错误导致。 需要将示例代码中的client.askForGUID替换成您要订阅的订阅通道对应的ID即可。
Specified signature is not matched with our calculation 这个报错是由于您在SDK中配置的AccessKeyID/AccessKeySecret不正确。 建议重新生成新的AccessKeyID/AccessKeySecret后,使用新的AK重启SDK。
数据订阅启动SDK报“keep alive error”错误。 SDK运行的服务器没有公网IP,不能连接数据传输服务的服务器,或者因为订阅通道的消费时间点不在订阅通道的数据范围之内。 创建公网IP,建立SDK的公网连接,或者重新修改消费位点,具体的修改方法详见修改订阅通道消费位点
client partition is empty,wait partition balance
  • 数据订阅启动比较慢,一般需要几分钟,此时客户端会提示“client partition is empty,wait partition balance”错误。
  • 对于同一个数据订阅实例,如果有多个下游Client消费数据,只有一个能正常订阅到数据。其他Client作为Backup,此时这些作为Backup的Client会报“client partition is empty,wait partition balance”错误。
  1. 确认数据订阅是否正在启动中。如果是正在启动中,则只需要耐心等待数据订阅正常启动。
  2. 如果数据订阅已经正常启动,则需要排查是否有多个Client消费数据,如有多个,只有正在订阅数据的Client异常或是出现网络连接异常时后,Backup才可进行数据订阅,详情请参考数据订阅SDK容灾
Redis数据同步报“Cannot read anything”错误 源Redis实例配置的client output buffer过小导致读取log失败造成的。

登录Redis管理控制台,单击 参数设置,在该页面调整client-output-buffer-limit参数即可,调整如下。

client-output-buffer-limit slave 0 0 0

DTS全量迁移报“java.sql.BatchUpdateException: INSERT, DELETE command denied to user 'user'”错误 全量迁移如果报INSERT、CREATE或DELETE等命令的权限问题,一般都是由于目标RDS实例被锁定,导致账号写权限被回收。

首先回收目标RDS实例的日志空间升级目标RDS实例的规格。然后在DTS控制台触发重试功能,断点重启任务,具体修复方法详见失败修复

适用于

  • 数据传输服务 DTS