全部产品
云市场

DTS同步数据常见问题

更新时间:2019-11-26 16:38:21

任务不是整库同步,源库发生online ddl操作

现象:某张临时表不存在或者已经存在报错

解法: 从同步对象去掉报错的源表同步,重启DTS任务,从目标库中删除报错的源表,等DTS任务追上没有延迟后,再在同步对象中加上报错的表即可。

源库数据中有AnalyticDB for MySQL不支持的非法值存在

现象:报错类似Cannot parse "2013-05-00 00:00:00": Value 0 for dayOfMonth must be in the range [1,31]], 主要是时间、日期类型的字段报错。

解法:因为AnalyticDB for MySQL不支持报错的非法值写入,如果任务处于“全量初始化”阶段,则修改源表的值为合法值即可(如上面报错的例子值改为2013-05-01 00:00:00);如果任务处理“增量同步”阶段,则需要把这张表从同步对象中去掉,然后重启DTS任务,修改源表值为合法值,再把表加到同步对象中重新同步即可;如果是整库同步的增量同步阶段报错,请提工单处理。

不支持字段类型修改的同步

现象:报错类似'id' is LONG type, Can't change column type to DECIMAL或者modify precision is not supported, col=id, type decimal, old=11, new=21,主要是修改字段类型的报错内容。

解法:因为AnalyticDB for MySQL不支持修改字段类型,所有修改字段类型时会直接报错,分两种情况:

  • 如果任务是整库同步,在AnalyticDB for MySQL上建一张新表,表名不同于报错的表,表结构和源表的表结构一致,通过insert into select将报错表中的数据写入到新建的表中,然后drop掉报错的表,rename新表为报错的表名,重启DTS任务即可;

  • 如果任务不是整库同步,则需要把这张表从同步对象中去掉,然后重启DTS任务,等任务延迟追上后,再把表加到同步对象中重新同步即可。

磁盘满报错

现象:报错信息是disk is over flow

解法:此报错表示AnalyticDB for MySQL实例磁盘已满,需要扩容或者删除部分数据以释放磁盘空间,保证磁盘空间有空余后重启DTS任务即可。

不支持主键为null

现象:报错信息类似syntax error :column 'TABLE.COL' is primary key, can not set null,即字段不能写入null值。

解法:目前AnalyticDB for MySQL不支持主键字段写入null值,如果可以修改源表主键为null的值则修改源表值,如果不能修改则无法对此表进行同步。

不支持无主键表同步

现象:任务是整库同步,并且在源库建的无主键表没有同步到目标库中,报错信息一般是表不存在。

解法:因为DTS不支持无主键表同步到AnalyticDB for MySQL中,所以如果遇到此情况,需要手动在目标库建表并且保证新建的表有主键,建表后重启DTS任务即可。

网络连接不稳定

现象:任务报错信息是Get inc_checkpoint config from Meta failed 或者 Read timed out

解法:DTS任务连接源数据库超时报错,可以尝试重启DTS任务。