MySQL常见错误分五类:连接失败(如2002/2003)、权限拒绝(如1045/1130)、SQL执行错误(如1049/1064)、存储引擎异常(如1213/1366)、资源耗尽(如1040/1226),掌握对应错误码及典型原因可大幅提升排障效率。

MySQL常见错误主要分五类:连接失败、权限拒绝、SQL语法或逻辑错误、存储引擎异常、资源耗尽。掌握这五类的典型表现和对应错误码,能大幅缩短排查时间。
连接失败类错误
这类错误表现为客户端根本连不上MySQL服务,通常不是SQL问题,而是环境或配置层面的阻断。
-
2002:本地Socket连接失败,常见于MySQL未启动、
mysql.sock路径错误或文件被删 -
2003:TCP/IP连接拒绝,多因MySQL未监听网络端口、防火墙拦截、host配置为
127.0.0.1却用localhost(触发socket而非TCP) -
2006 / 2013:连接中途断开,常由超时(
wait_timeout)、网络抖动、中间件异常或服务意外终止引起
权限拒绝类错误
能连上但立即被拒,说明认证或授权环节出问题,重点检查用户、密码、主机白名单和具体对象权限。
-
1045:用户名或密码错误,最常见;也可能是认证插件不兼容(如
caching_sha2_password插件缺失) -
1130:用户从指定host(如
'user'@'192.168.1.100')连接被拒绝,实际只允许'user'@'localhost' -
1044 / 1141 / 1142:已登录,但无权访问某数据库、表或字段,需用
SHOW GRANTS FOR 'user'@'host';核对权限
SQL执行类错误
语句能提交,但在解析、优化或执行阶段报错,多数可直接从错误消息定位到具体字段、表名或语法位置。
-
1049:数据库不存在——检查
USE db_name;或SQL中引用的库名拼写 -
1146:数据表不存在——注意大小写敏感性(Linux下表名区分大小写)、引擎类型(如
INFORMATION_SCHEMA里查不到临时表) - 1054:字段不存在——别名使用不当、表连接遗漏ON条件、或SELECT中引用了未定义的列别名
-
1064:SQL语法错误——常见于引号不闭合、关键字拼错(如
INTO写成INTO)、或MySQL版本不支持的语法(如8.0+的VALUES TABLE在5.7不可用)
存储与数据一致性类错误
涉及InnoDB事务、外键、死锁、字符集等底层机制,往往伴随数据完整性风险,需谨慎处理。
-
1213:死锁发生,MySQL自动回滚其中一方事务;可通过
SHOW ENGINE INNODB STATUS;查看最近死锁详情 - 1452:插入/更新违反外键约束(子表值在父表找不到);检查关联字段值、NULL设置及级联规则
-
1366:字符集不匹配导致插入失败,例如客户端用
utf8mb4发送含emoji的数据,但表字段是utf8(仅支持3字节) -
1021 / 1114:磁盘满或表已满(MyISAM达最大行数),需清理空间或调整
MAX_ROWS
资源与配置类错误
系统级限制触发,错误本身不指向业务逻辑,但会全局影响服务可用性。
-
1040 / 1203:连接数超限,检查
max_connections设置、应用连接池是否泄漏、是否有长连接未释放 -
1037 / 1038:内存不足,排序或临时表操作失败;调大
sort_buffer_size、tmp_table_size前先确认物理内存余量 -
1226:用户资源配额超限(如
MAX_QUERIES_PER_HOUR),适用于多租户管控场景 - my.cnf权限错误(如world-writable):MySQL主动忽略配置文件,导致实际运行参数与预期不符










