MySQL错误分为六类:连接失败、权限拒绝、SQL语法/语义错误、资源耗尽、存储引擎异常、复制中断,覆盖95%线上故障;每类对应典型错误码及精准排查路径。

ERROR 2003 / 2002:连不上 MySQL 的根本原因在哪
这是最常被当成“网络问题”草率处理的错误,但真正原因往往藏在本地配置里:ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx' 表示 TCP 连接失败;ERROR 2002 (HY000): Can't connect to local MySQL server through socket 'xxx.sock' 则说明 Unix socket 路径不对或 mysqld 没起来。
- 先确认服务状态:
sudo systemctl status mysql
(Ubuntu/Debian)或brew services list | grep mysql
(macOS Homebrew) - 检查 socket 路径是否一致:对比
my.cnf中socket = /var/run/mysqld/mysqld.sock和客户端报错里写的路径 - 别忽略
--skip-name-resolve:如果启用了该参数,又在用户权限中用了主机名(如'user'@'web01.example.com'),就会静默拒绝连接——改用 IP 或'user'@'%'临时验证
ERROR 1045 / 1044 / 1130:权限错误不是密码错了,而是“谁在哪用什么方式连”没配对
ERROR 1045 (28000): Access denied for user 'root'@'localhost' 看似密码错误,实则可能是用户不存在、host 匹配失败、或认证插件不兼容(尤其 MySQL 8.0+ 默认用 caching_sha2_password)。
- 登录时明确指定 host:
mysql -u root -p -h 127.0.0.1
(走 TCP) vsmysql -u root -p -S /tmp/mysql.sock
(走 socket),两者对应的用户记录是分开的 - 查真实用户记录:
SELECT User, Host, plugin FROM mysql.user WHERE User = 'root';
,注意Host字段必须完全匹配('localhost'≠'127.0.0.1') - 重置密码前先看认证插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpass';
,否则 JDBC 连接可能报Public Key Retrieval is not allowed
ERROR 1064 / 1054 / 1318:SQL 报错别急着改语句,先看版本和上下文
ERROR 1064 (42000): You have an error in your SQL syntax 是“语法错误”的万金油提示,但真正问题常不在拼写——比如 MySQL 5.7 不支持 JSON_CONTAINS,8.0 才加入;ERROR 1318 直接告诉你存储过程参数数量不对:Incorrect number of arguments for PROCEDURE xxx; expected 2, got 1。
采用 php+mysql 数据库方式运行的强大网上商店系统,执行效率高速度快,支持多语言,模板和代码分离,轻松创建属于自己的个性化用户界面 v3.5更新: 1).进一步静态化了活动商品. 2).提供了一些重要UFT-8转换文件 3).修复了除了网银在线支付其它支付显示错误的问题. 4).修改了LOGO广告管理,增加LOGO链接后主页LOGO路径错误的问题 5).修改了公告无法发布的问题,可能是打压
- 用
SELECT VERSION();确认实际运行版本,别信项目文档写的“兼容 5.7+” - 关键词大小写敏感性取决于
lower_case_table_names配置,表名在 Linux 上默认区分大小写,开发机 macOS 可能不报错,上线就炸 - 函数/关键字是否被保留:MySQL 8.0 把
groups、rank加入保留字,建表字段叫group_id没事,叫groups就得加反引号:`groups`
ERROR 1030 / 1114 / 1205:资源类错误背后往往是配置漂移或磁盘失控
ERROR 1030 (HY000): Got error 12 from storage engine 这种模糊提示,90% 是磁盘满或 InnoDB 表空间损坏;ERROR 1114 (HY000): The table 'xxx' is full 并非数据满了,而是临时表空间或 sort buffer 不足;ERROR 1205 (HY000): Deadlock found when trying to get lock 是并发写冲突,不是代码 bug。
- 立刻查磁盘:
df -h
,重点看/var/lib/mysql所在分区,100%是高频死因 - 查临时表空间位置:
SHOW VARIABLES LIKE 'tmpdir';
,别让tmpdir指向根分区小容量目录 - 死锁日志在错误日志里(
slow_query_log_file或error_log),不是 SHOW PROCESSLIST 能看到的——开innodb_print_all_deadlocks = ON持久化记录
skip-name-resolve 干扰、版本差异是否让 JSON 函数突然失效、磁盘满是否由 binlog 日志未清理引发……这些细节不手动验证,光看报错只会反复兜圈子。









