mysql密码错误一直提示怎么办_mysql认证异常处理

来源:这里教程网 时间:2026-02-28 20:36:31 作者:

MySQL 连接时提示
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;
查看实际存在的账号组合,注意大小写和空格

重置 root 密码但跳过权限验证仍失败?检查
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;
如果用 Docker 启动,加参数
--default-authentication-plugin=mysql_native_password
更稳妥
确认客户端是否支持:Python 的
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
或具体内网 IP
授权命令必须带 host:
GRANT 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
,就可能花一小时兜圈子。

相关推荐