官方文档
MySQL 错误码对照表
错误信息 | 问题原因 | |
---|---|---|
8001 |
空 |
请求使用的内存超过 TiDB 内存使用的阈值限制 |
8002 |
空 |
带有 SELECT FOR UPDATE 语句的事务,在遇到写入冲突时,为保证一致性无法进行重试,事务将进行回滚并返回该错误 |
8003 |
空 |
ADMIN CHECK TABLE 命令在遇到行数据跟索引不一致的时候返回该错误 |
8004 |
空 |
单个事务过大 |
8005 |
Write Conflict, txnStartTS is stale |
事务在 TiDB 中遇到了写入冲突; 可以检查 tidb_disable_txn_auto_retry 是否为 on, 如果是,将其设置为 off;SET GLOBAL tidb_disable_txn_auto_retry = off; 开启自动重试如已经是 off,将 tidb_retry_limit 调大到不再发生该错误。事务自动重试及带来的异常 |
9001 |
PD Server Timeout |
请求 PD 超时,请检查 PD Server 状态/监控/日志以及 TiDB Server 与 PD Server 之间的网络; 这个报错一般是 TiDB 访问 PD 出了问题,TiDB 后台有个 worker 会不断地从 PD 查询 safepoint,如果超过 100s 查不成功就会报这个错 一般是因为 PD 磁盘操作过忙、反应过慢,或者 TiDB 和 PD 之间的网络有问题。 |
9002 |
TiKV Server Timeout |
请求 TiKV 超时,请检查 TiKV Server 状态/监控/日志以及 TiDB Server 与 TiKV Server 之间的网络; |
9003 |
TiKV Server is Busy |
TiKV 操作繁忙,一般出现在数据库负载比较高时,请检查 TiKV Server 状态/监控/日志; |
9004 |
Resolve Lock Timeout |
清理锁超时,当数据库上承载的业务存在大量的事务冲突时,会遇到这种错误,请检查业务代码是否有锁争用; |
9005 |
Region is unavailable |
访问的 Region 不可用,某个 Raft Group 不可用,如副本数目不足,出现在 TiKV 比较繁忙或者是 TiKV 节点停机的时候,请检查 TiKV Server 状态/监控/日志; |
9006 |
GC life time is shorter than transaction duration |
GC Life Time 间隔时间过短,长事务本应读到的数据可能被清理了,可使用如下命令增加 GC Life Time : update mysql.tidb set variable_value='30m' where variable_name='tikv_gc_life_time'; 其中 30m 代表仅清理 30 分钟前的数据,这可能会额外占用一定的存储空间。 |
9007 |
Write Conflict |
事务在 TiKV 中遇到了写入冲突,可以检查 tidb_disable_txn_auto_retry 是否为 on。如是,将其设置为 off;如已经是 off,将 tidb_retry_limit 调大到不再发生该错误。; |
2013 |
Lost connection to MySQL server during query |
log 中是否有 panic dmesg 中是否有 oom,命令: dmesg -T | grep -i oom 长时间没有访问,也会收到这个报错,一般是 tcp 超时导致的,tcp 长时间不用, 会被操作系统 kill。 |
2003 |
Can't connect to MySQL server on 'xxx.xxx.xxx.xx' (10061 "Unknown error") |
TiDB链接中断, 1 如果配置了内存限制,那么有可能是执行的SQl语句使用的内存过多,为了保护服务器不宕机,TiDB会杀死占用内存过多进程; 2 查看TiDB日志,确定进程中断的原因 |
1105 |
other error: unknown error Wire Error(InvalidEnumValue(4004)) |
这类问题一般是 TiDB 和 TiKV 版本不匹配,在升级过程尽量一起升级,避免版本 mismatch。 |
1148 |
the used command is not allowed with this TiDB version |
这个问题是因为在执行 LOAD DATA LOCAL 语句的时候,MySQL 客户端不允许执行此语句(即 local_infile 选项为 0)。 解决方法是在启动 MySQL 客户端时,用 --local-infile=1 选项。 具体启动指令类似: mysql --local-infile=1 -u root -h 127.0.0.1 -P 4000 。 有些 MySQL 客户端需要设置而有些不需要设置,原因是不同版本的 MySQL 客户端对 local-infile 的默认值不同。 |
EOF |
空 |
当客户端或者 proxy 断开连接时,TiDB 不会立刻察觉连接已断开,而是等到开始往连接返回数据时,才发现连接已断开,此时日志会打印 EOF 错误。 |