

新闻资讯
技术学院需先区分“用户不存在”“密码错误”“host不匹配”或“认证插件不兼容”;错误中的'@yyy'即客户端host,@'localhost'走socket,@'IP'走TCP;查mysql.user表确认账号组合;caching_sha2_password插件可能导致老客户端报错,需改plugin或启动参数。
Access denied for user 怎么快速定位这不是单纯改密码就能解决的问题,得先分清是「用户不存在」「密码错」「host 不匹配」还是「认证插件不兼容」。错误信息里藏了关键线索:Access denied for user 'xxx'@'yyy' 中的 yyy 就是客户端来源 host,常被忽略。
@'localhost',说明客户端走的是 Unix socket(即使你写了 -h 127.0.0.1,也可能被 MySQL 自动转成 localhost)@'127.0.0.1' 或 @'192.168.x.x',说明走 TCP,此时 localhost 用户不生效SELECT user, host, plugin FROM mysql.user; 查看实际存在的账号组合,注意大小写和空格plugin 字段MySQL 5.7+ 默认用 caching_sha2_password 插件,老客户端(如某些 Python MySQLdb、旧版 Navicat)不支持,会报错“Client does not support authentication protocol”,看起来像密码错,实则是协议不兼容。
UPDATE mysql.user SET plugin='mysql_native_password' WHERE user='root';
FLUSH PRIVILEGES;
--default-authentication-plugin=mysql_native_password 更稳妥pymysql 支持,mysqlclient 需 ≥ 1.4.0;Java 的 Connector/J ≥ 8.0.13 才默认支持 caching_sha2_password
Host 'xxx' is not allowed to connect 怎么修这是权限问题,不是密码问题。MySQL 默认只允许 root@localhost,没开远程访问权限。
netstat -tlnp | grep :3306,看是否绑定了 127.0.0.1(拒绝远程)还是 0.0.0.0(允许)my.cnf 中的 bind-address,设为 0.0.0.0 或具体内网 IPGRANT ALL ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY 'your_pass' WITH GRANT OPTION;
FLUSH PRIVILEGES;,且注意防火墙(
ufw allow 3306 或 iptables 规则)mysql_config_editor 存了登录信息却还是提示密码错这个工具生成的 ~/.mylogin.cnf 是加密文件,但只在命令行客户端(mysql 命令)中生效,GUI 工具、程序代码完全不读它。很多人误以为设了就全局生效。
mysql --login-path=local -e "SELECT 1",不是 mysql -u root -p
mysql_config_editor print --all
mysql_config_editor remove --login-path=local
$、!)要加单引号或转义,否则 shell 会提前解析认证异常最麻烦的地方不在密码本身,而在 MySQL 把「用户+host+plugin」三者绑定成一个完整身份。少看一眼 host 或 plugin,就可能花一小时兜圈子。