MySQL高频错误码分四类:连接类(如2002、2003、1045)、SQL执行类(如1064、1048、1062、1054)、资源与状态类(如1040、2006、1213、1114)、配置与环境类(如2059、PID文件异常、InnoDB日志异常),每类对应典型原因及排查方法。

MySQL 错误码是排查问题最直接的线索,数字背后对应着明确的故障类型。掌握高频错误码及其含义,能大幅缩短定位时间,避免盲目重启或重装。
连接类错误:服务通不通?权限对不对?
这类错误最先出现,往往拦在应用启动或数据库访问第一步。
-
2002 (HY000):无法通过 socket 连接本地 MySQL,常见于 MySQL 未启动、socket 文件路径错误(如
/var/lib/mysql/mysql.sock不存在)或权限问题。检查mysqld进程是否运行,确认my.cnf中socket配置与客户端一致。 -
2003 (HY000):无法通过 TCP 连接 MySQL 服务器,典型原因包括 MySQL 未监听网络端口、防火墙拦截(如 3306 端口)、
bind-address配置为127.0.0.1导致拒绝远程连接。可执行netstat -tlnp | grep :3306查看监听状态。 -
1045 (28000):访问被拒绝,最常见于密码错误、用户不存在、主机限制(如
'user'@'192.168.1.%'不匹配实际连接 IP)或认证插件不兼容(MySQL 8.0 默认caching_sha2_password,旧客户端可能不支持)。可通过SELECT user, host, plugin FROM mysql.user核查用户配置,必要时改用mysql_native_password。
SQL 执行类错误:语句写得对不对?数据合不合法?
这类错误多在应用执行查询或 DML 时抛出,通常与 SQL 语法、约束规则或字段定义强相关。
-
1064 (42000):SQL 语法错误。提示中会标注“near … at line X”,需重点检查关键字拼写、引号/括号配对、保留字是否加反引号(如表名
order必须写成`order`)。 -
1048 (23000):字段不能为空(
Column 'xxx' cannot be null)。说明插入或更新时未给NOT NULL字段赋值,或显式传入了NULL。检查应用层数据组装逻辑及默认值设置。 -
1062 (23000):唯一键冲突(
Duplicate entry 'xxx' for key 'yyy')。常见于主键或唯一索引重复插入。可先SELECT校验是否存在,或改用INSERT IGNORE/ON DUPLICATE KEY UPDATE处理。 -
1054 (42S22):字段不存在(
Unknown column 'xxx' in 'field list')。多因表结构变更后应用未同步(如 ORM 模型未更新)、SQL 中列名写错或大小写敏感(Linux 下表名区分大小写)。建议统一小写命名并开启lower_case_table_names=1(仅限初始化时设置)。
资源与状态类错误:系统扛不扛得住?数据稳不稳?
这类错误反映底层资源瓶颈或存储引擎异常,常伴随性能下降或服务中断。
-
1040 (HY000):已达到最大连接数(
Too many connections)。查看当前连接:SHOW VARIABLES LIKE 'max_connections'; SHOW STATUS LIKE 'Threads_connected';。临时调高可用SET GLOBAL max_connections = 2000;,长期应优化连接池复用或排查连接泄漏。 -
2006 / 2013 (HY000):连接丢失(
MySQL server has gone away或Lost connection during query)。主因是wait_timeout或interactive_timeout超时、查询结果过大超出max_allowed_packet、或服务异常终止。调整超时参数、增大包限制,应用层增加重连机制。 -
1213 / 40001 (40001):死锁(
Deadlock found when trying to get lock)。InnoDB 自动回滚一方事务。需分析SHOW ENGINE INNODB STATUS\G中的 LATEST DETECTED DEADLOCK 区域,优化事务粒度、访问顺序一致性、减少长事务。 -
1114 (HY000):表已满(
The table 'xxx' is full)。通常因磁盘空间不足、临时表空间耗尽或 MyISAM 表达到文件大小上限。执行df -h查磁盘,SHOW VARIABLES LIKE 'tmpdir';查临时目录空间,清理日志或扩大分区。
配置与环境类错误:启动不了?加载失败?
这类错误多出现在 MySQL 启动阶段,影响服务可用性。
-
2059 (HY000):认证插件无法加载(
caching_sha2_password.so: cannot open shared object file)。说明插件文件缺失或路径错误。确认插件目录存在该文件,或在my.cnf中添加default_authentication_plugin=mysql_native_password兼容旧环境。 -
PID file not found:启动时报 “PID file could not be found”。常见于数据目录权限不对(如非
mysql用户所有)、残留mysqld进程、或磁盘满。执行chown -R mysql:mysql /var/lib/mysql、killall mysqld、df -h排查。 -
InnoDB 日志序列号异常:错误日志提示 “log sequence number is in the future”。表明 InnoDB 数据文件损坏。需启用
innodb_force_recovery=1~6(逐级尝试),成功启动后立即导出数据,再重建实例。










