官方文档
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 错误。
分类: TiDB

毛巳煜

高级软件开发全栈架构师

工信部备案号:辽ICP备17016257号-2