本章节提供了在任务运行过程中,常见的错误及处理方法,用户可按照对应指导进行错误处理。
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 数据失败。 解决方法 销毁任务并重建任务。对于包年包月的任务,可通过重置操作来新建任务。 |