mysql无法连接时报1045错误怎么办_mysql权限设置问题

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

什么是 MySQL 1045 错误

MySQL 报错

ERROR 1045 (28000): Access denied for user 'xxx'@'xxx' (using password: YES/NO)
,本质是认证失败,不是网络不通或服务没启——它已经连上 MySQL 服务器了,只是账号密码或权限不匹配。常见于本地开发、Docker 部署、云数据库初始化后首次连接等场景。

检查用户名、主机名和密码是否匹配

MySQL 的用户是

'user'@'host'
二元组,
'root'@'localhost'
'root'@'127.0.0.1'
是两个完全不同的用户,密码可以不同,权限也可以独立设置。

用已知有权限的账号(如系统 root 或 Docker 初始化时指定的 root)登录:
mysql -u root -p
查当前有哪些用户:
SELECT User, Host FROM mysql.user;
确认你试图连接的组合是否存在,比如想用
mysql -u app -h 192.168.1.100 -p
,就要找
'app'@'192.168.1.100'
或通配符
'app'@'%'
密码是否正确?注意:MySQL 8.0+ 默认用
caching_sha2_password
插件,某些老客户端(如旧版 PHP mysqli、Navicat 旧版本)不支持,会报 1045 —— 此时不是密码错,而是认证方式不兼容

重置密码或修复认证插件(MySQL 8.0+ 常见)

如果确定用户名存在但密码忘了,或遇到

using password: YES
却仍被拒,大概率是插件不兼容或密码过期。

临时跳过权限验证启动(仅限本地排障):
mysqld --skip-grant-tables &
,然后连上去执行
FLUSH PRIVILEGES;
再改密码
对 MySQL 8.0+ 用户,强制改用兼容性更好的插件:
ALTER USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'your_new_pass';
若用户不存在,别直接 INSERT 到
mysql.user
表——要用
CREATE USER
+
GRANT
,否则权限表可能不一致
执行完
GRANT
后务必运行
FLUSH PRIVILEGES;
,否则改动不生效(尤其在非 root 用户下修改他人权限时)

远程连接被拒的典型配置遗漏

即使账号密码全对,

'user'@'%'
已创建,也常因以下原因连不上:

MySQL 配置文件中
bind-address = 127.0.0.1
(默认值),导致只监听本地回环,需改为
0.0.0.0
或注释掉该行
Linux 防火墙(
ufw
firewalld
)拦截了 3306 端口:
sudo ufw allow 3306
Docker 运行时没暴露端口:
-p 3306:3306
缺失,或映射到错误宿主机端口
云服务商(如阿里云、腾讯云)安全组规则未放行 3306 入方向流量

这些环节任何一个断掉,都会让客户端卡在“连接超时”,但一旦能建立 TCP 连接(比如 telnet 通了),再报 1045 就一定是权限层问题——这点必须分清。

相关推荐