mysql报1045错误通常表现为 ERROR 1045 (28000): Access denied for user 用户@主机 (using password: YES/NO),意味着客户端连接时被mysql服务器拒绝了。这个问题在开发、部署和运维中非常常见,一般和账号、密码、权限有关。

一、常见原因
- 用户名或密码输入错误
- 该用户没有从当前客户端主机连接的权限
- mysql服务中不存在该用户
- 配置文件如 my.cnf 中设置了跳过授权表后又未正确处理
二、确认账号与密码
首先应在命令行用如下方式测试连接,观察报错中 using password 的值是 YES 还是 NO:
mysql -u root -p # 输入密码后若报 1045,注意提示里的主机名 # 例如 Access denied for user 'root'@'localhost'
如果确定密码忘记,可尝试用无密码模式重启mysql来重置。
三、查看用户主机权限
mysql的用户由 用户名 和 主机 共同确定。例如 'root'@'localhost' 与 'root'@'%' 是两个不同账号。可查询系统表确认:
SELECT user, host FROM mysql.user;
若客户端从 192.168.0.1 连接,但用户只允许 localhost,就会报1045。此时需创建对应主机权限:
CREATE USER 'root'@'192.168.0.1' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.1' WITH GRANT OPTION; FLUSH PRIVILEGES;
四、忘记密码时的重置步骤
以Linux为例,先停止mysql服务,再以跳过授权表方式启动:
systemctl stop mysqld mysqld_safe --skip-grant-tables &
随后无需密码登录并修改密码:
UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root';
FLUSH PRIVILEGES;
修改完成后退出,用正常方式重启mysql服务即可。
五、检查配置文件
有时 my.cnf 里写了 skip-grant-tables 用于调试,忘记去掉也会导致任意密码都能进或权限异常。应确认配置文件中没有遗留如下行:
[mysqld] # skip-grant-tables
以上方法覆盖了mysql报1045错误的主要处理场景,按顺序排查基本可以解决连接被拒的问题。
mysql1045错误access_denied修改时间:2026-07-28 05:39:23