常见错误处理

最近更新时间:2024-04-08 10:55:42

我的收藏
本章节提供了在任务运行过程中,常见的错误及处理方法,用户可按照对应指导进行错误处理。

MySQL 常见错误

如下为 MySQL 数据库在迁移、同步、订阅过程中的报错和处理方法,所列错误码为 MySQL 系统的错误码。
错误码
报错码说明
报错场景
报错示例
分析和处理方法
1227
权限问题
数据迁移、数据同步、数据订阅
Error 1227: Access denied.
问题分析
执行任务的账号没有连接源库/目标库的权限。
处理方法
给执行任务的账号进行授权。具体账号权限要求请参考 操作指导中的对应文档
1040
数据库连接数太多
数据迁移、数据同步
Error 1040: Too many connections.
问题分析
数据库连接数太多。
处理方法
修改源数据库的最大连接数 max_connections 为更大值,关闭源库不使用的连接,或者稍后在业务量少时进行任务重试。
1045
操作被拒绝
数据迁移、数据同步、数据订阅
Error 1045 (28000): Access denied for user '{{xx}}'@'{{xx}}' (using password: xx)
问题分析
在任务运行中用户修改了账号权限或密码信息。
在源库或者目标库上未对 DTS 的服务 IP 进行授权。
处理方法
检查是否有修改账号或者密码操作,如果有请撤销或者改回,具体账号权限要求请参考 操作指导中的对应文档
参考 文档 对 DTS 的服务 IP 进行授权。
1050
库表已存在,重复执行 DDL 语句
数据迁移、数据同步
Error 1050: Table {{*}} already exists, binlog position:<{{*}}>, gtid:{{*}}, related tables: {{*}}
问题分析
创建多合一迁移/同步任务,多个源库执行了相同的 DDL 操作导致在目标库 DDL 操作重复。多合一场景中,仅支持在一个同步任务中勾选 DDL 操作。
任务过程中,用户同时在目标库中也创建了该表,导致源库 DDL 操作同步到目标库中,重复执行。
网络异常或语句执行时间太长,任务重试过程中造成 DDL 重复。
处理方法
按照如上分析排查,如需跳过当前事务,请 提交工单 处理。
1054
相关表中包含未知列
数据迁移、数据同步
Error 1054: Unknown column {{*}} related tables: {{*}}
问题分析
在任务启动前,未选择迁移/同步该表结构,目标库中不包含对应列。
在任务运行中,用户同时操作了目标库,删除了该列。
处理方法
请在目标库上确认该列是否存在;如果不存在,请补齐该列后进行任务重试。
1062
主键冲突报错
数据同步
Error 1062: Duplicate entry '{{xx}}' for key 'PRIMARY', related tables: '{{xx}}'.
问题分析
同步场景中,如果主键冲突处理机制选择冲突报错,则 DTS 遇到目标库与源库同步的数据发生主键冲突会报错。
在任务运行过程中,手动在目标库中写入数据,导致目标库中已存在相同主键的记录。
在任务运行前,源库关闭了唯一键检查,在源库本身已经存在重复主键数据。
在任务运行过程中,未同步 Delete 操作,导致源库数据删除后未同步至目标库,造成源库插入数据时与目标库主键冲突。
处理方法
检查源库是否有重复主键,如果有请先处理。
修改或者删除目标库中对应数据表的主键,然后重试任务。
1071
索引字段长度太长
数据迁移、数据同步
Error 1071 (42000): Specified key was too long; max key length is 767 bytes.
问题分析
默认情况下,InnoDB 引擎单一字段索引的长度最大为767bytes,即:767/2<384个双字节的字段,或者767/3<256个三字节的字段。GBK 是双字节,UTF-8是三字节,utf8mb4_unicode_ci 是四字节。MySQL 5.6 及其以上版本,所有 MyISAM 表都会被自动转换为 InnoDB,所以在自建数据库上有超过767bytes的组合索引列,同样的建表语句在自建库上运行没问题,但是在 MySQL 5.6 版本以上就会有问题。
处理方法
修改文件中出错行组合索引列的长度。
示例-建表时索引长度定义最大为255:create table test(test varchar(255) primary key) char set utf8;
1146
库表不存在
数据迁移、
数据同步
Error 1146: Table '{{xx}}' doesn't exist on query.
问题分析
任务过程中,目标库上删除了该表。
源库在数据导出阶段进行了库表结构变更的 DDL。
任务启动前,未选择迁移/同步该表结构。
处理方法
请到目标库上执行show create table xxx,确认该表是否存在;如果不存在,请在目标库上手动创建该表。
1213
源库和目标库双写引起死锁
数据迁移、数据同步
Error 1213: Deadlock found when trying to get lock; try restarting transaction, related tables: '{{xx}}'.
问题分析
DTS 在目标库的写操作与用户在目标库的写操作冲突,造成死锁。
处理方法
终止死锁进程,重建任务。
建议实例控制下更新操作的加锁逻辑,给表加索引,尽量走行锁,减少锁开销。
1236
源端 Binlog 日志问题
数据迁移、数据同步、数据订阅
Error 1236 (HY000): Cannot replicate because the master purged required binary logs. Replicate the missing transactions from elsewhere, or provision a new slave from backup……
问题分析
源库 Binlog 日志保存时间短,DTS 拉取时已经被清理,或者拉取到的 Binlog 位点不正确。
处理方法
确认源库 Binlog 的保存时间(expire_logs_days)设置符合业务需求,建议保存时间大于3天,然后重建任务。
1414
数据导出阶段源库进行了变更库表结构的 DDL
数据迁移
Error 1414: Table definition has changed, please retry transaction.
问题分析
在源库数据导出阶段,不能进行库表结构变更的 DDL 操作,否则会可能会导致报错。
处理方法
重建迁移任务。

DTS 常见错误

如下为 DTS 系统在迁移、同步、订阅过程中的常见报错及处理方法。
报错说明
报错场景
报错示例
分析和处理方法
数据库连接异常
数据迁移、数据同步、数据订阅
{{*}}invalid connection{{*}}.
driver: bad connection,{{*}}
dial tcp {{*}}: connect: connection refused.
问题分析
源/目标库被隔离或下线。
源/目标库长时间重启不成功。
源/目标库发生主从切换长时间不成功。
源/目标库负载过高。
人工或者程序定期/不定期地 Kill 源/目标库上的连接。
其他可能导致网络连接失败的情况,例如对源/目标库设置了网络安全策略阻止了接入请求。
处理方法 请按照上述分析逐个排查并解决。
对于腾讯云实例,可通过实例控制台以及腾讯云可观测平台协助排查和解决问题,解决成功后可在控制台重试任务进行恢复。
如果未发现问题或者解决不成功,可 提交工单 处理。
数据库连接异常
数据迁移、数据同步、数据订阅
dial tcp {{*}}: connect: connection refused.
问题分析
源/目标库被隔离或下线。
源/目标库长时间重启不成功。
源/目标库发生主从切换长时间不成功。
源/目标库负载过高。
其他可能导致网络连接失败的情况,对源/目标库设置了网络安全策略阻止了接入请求。
处理方法 请按照上述分析逐个排查并解决。
对于腾讯云实例,可通过实例控制台以及腾讯云可观测平台协助排查和解决问题,解决成功后可在控制台重试任务进行恢复。
如果未发现问题或者解决不成功,可 提交工单 处理。
源数据库存在较长时间的 SQL 在运行导致加锁失败
数据迁移、数据同步
Find Resumable Error, src db has long query sql, fix it and try it later.
Find Resumable Error: Task failed due to table lock failure caused by time-consuming SQL query statements in source instance.

问题分析
如果源数据库存在较长时间的 SQL 在运行(大于5s),为保证源数据业务不受影响,DTS 需要等慢 SQL 运行结束后再加锁进行数据导出,默认加锁时间为60s,超时后加锁失败,任务报错。
处理方法
处理源库中的慢 SQL 或者等慢 SQL 运行结束后进行任务重建。
Binlog 参数格式不符合要求
数据迁移、数据同步、数据订阅
Statement binlog format unsupported:{{xx}}.
binlog must ROW format, but MIXED now.
binlog row before/after image not full, missing column {{xx}}, binlog posistion:{{xx}}, gtid:{{*}}.
问题分析
为了保证数据的正确性和完整性,DTS 会对源库 Binlog 相关参数做如下要求,在检查阶段也会对源库的 Binlog 参数进行检查,不符合要求则会报错,无法启动任务。
检查通过任务启动后,如果用户修改了源库 Binlog 参数也会导致任务报错,请确保源库 Binlog 满足如下要求。
binlog_format 需要设置为 ROW
binlog_row_image 需要设置为 FULL
处理方法
根据提示修改报参数,详细操作指导请参考 Binlog 参数检查,然后重建任务。
注意:参数修改后需要重启线程才能生效,数据库重启后参数会恢复初始配置,所以重启后请确认参数配置正确。
内置 Kafka 异常
数据订阅
kafka: error while consuming {{*}}.
kafka: Failed to produce message to topic.
问题分析
DTS 数据订阅内置 Kafka 组件生产或消费异常,后端服务会自动重试并自愈,请刷新一下页面,关注任务的状态流转。
处理方法
如果超过10分钟后刷新,状态仍然没有流转,请 提交工单 处理。
任务停止超过7天,Kafka 数据过期
数据订阅
kafka server: The requested offset is outside the range of offsets maintained by the server for the given topic/partition.
问题分析
由于任务停止或者异常时间超过7天,DTS 任务中间缓存的 Kafka 数据过期,导致读取 Kafka 数据失败。
解决方法
销毁任务并重建任务。对于包年包月的任务,可通过重置操作来新建任务。