【MySql】ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)解决方案

一、错误信息

连接MySQL时候报错如下

[root@lzh-2024 ~]# mysql -uroot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@lzh-2024 ~]# 

在这里插入图片描述

二、出现Access denied原因排查

1、确认密码是否正确

确保输入的密码与 root 用户的密码一致。
如果忘记密码,可以尝试重置 root 密码(见下文)。

2. 检查 root 用户的权限(重要)

登录 MySQL 服务器(例如从本地登录),检查 root 用户的权限:

-- 如果在终端连接mysql时需要
mysql -u root -p  
-- 查看用户权限
SELECT user, host FROM mysql.user WHERE user = 'root';

在这里插入图片描述
如果 host 列中没有 localhost 或 %,说明 root 用户没有从该 IP 地址登录的权限。

如果需要允许从localhost 登录(如果允许所有机器那么用%),可以执行如下语句添加权限

CREATE USER 'root'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3、重置root 密码

如果忘记 root 密码,可以通过以下步骤重置

(1)停止 MySQL 服务
sudo systemctl stop mysql
(2)以安全模式启动 MySQL
sudo mysqld_safe --skip-grant-tables &
(3)登录 MySQL(无需密码)
mysql -u root
(4)重置 root 密码

USE mysql;
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;

(5)重启 MySQL 服务
sudo systemctl restart mysql

root 用户已经允许从任意主机(%)和本地(localhost)登录,但仍然无法远程连接,请参考4、5、6

4、MySQL 配置问题

  • 检查 bind-address 配置
    1、MySQL 默认只监听本地地址(127.0.0.1),需要修改配置以允许远程连接。
    2、打开 MySQL 配置文件(通常是 /etc/my.cnf 或 /etc/mysql/my.cnf)。
    找到 bind-address 配置项,将其改为 0.0.0.0(监听所有网络接口)或服务器的公网 IP 地址
[mysqld]
bind-address = 0.0.0.0
    3、保存文件并重启 MySQL 服务

sudo systemctl restart mysql

  • 检查 skip-networking 配置
    确保 MySQL 配置文件中没有启用 skip-networking。如果存在该配置项,将其注释或删除
    # skip-networking

5、防火墙配置

  • 检查服务器防火墙
    确保服务器的防火墙允许 MySQL 端口(默认是 3306)的入站连接。例如
    如果使用 ufw(Ubuntu):
    sudo ufw allow 3306/tcp
    如果使用 firewalld(CentOS):
    sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
    sudo firewall-cmd --reload
  • 检查云服务器安全组
    如果使用云服务器(如 AWS、阿里云等),确保安全组规则允许从远程 IP 地址访问 MySQL 端口(3306)

6、用户权限问题

1、确认 root 用户的权限,检查 root 用户的权限是否正确
SELECT user, host FROM mysql.user WHERE user = 'root';
确保 host 列包含 %(允许任意主机)或远程主机的 IP 地址
在这里插入图片描述

2、重新授权 root 用户,如果权限不正确,可以重新授权 root 用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

### 解决 Windows 下 MySQL 错误 1045 (28000) 访问被拒的方法 #### 密码验证机制不匹配 当遇到 `ERROR 1045 (28000)` 的时候,即使确认密码无误也可能无法登录。这可能是由于MySQL版本更新后默认的身份验证插件发生了变化所致[^3]。 对于这种情况,在尝试其他解决方案之前可以先检查当前用户的认证方式: ```sql SELECT User, Host, plugin FROM mysql.user WHERE User='root'; ``` 如果结果显示`plugin`列不是`mysql_native_password`而是其他的值,则可以通过下面命令修改它: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; FLUSH PRIVILEGES; ``` 请注意替换 `'your_new_password'` 为你想要设置的新密码字符串。 #### 使用安全模式重置密码 另一种常见的情况是因为忘记了 root 用户的密码或者是密码策略过于严格而造成的问题。此时可以在跳过权限表加载的情况下启动服务来绕过正常的安全控制流程从而允许更改凭证信息。 具体操作如下所示: 停止正在运行的服务: ```powershell net stop mysql ``` 以 --skip-grant-tables 参数重启mysqld进程: ```powershell "C:\Program Files\MySQL\MySQL Server X.Y\bin\mysqld.exe" --console --skip-grant-tables ``` 这里假设安装路径为 `"C:\Program Files\MySQL\MySQL Server X.Y\"`, 需要根据实际情况调整路径中的X.Y部分以及整个文件夹名称。 一旦成功进入无需身份验证的状态就可以执行SQL语句重新设定账户密码了: ```sql USE mysql; UPDATE user SET authentication_string=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES; QUIT; ``` 最后记得按照常规方法再次关闭并正确开启数据库引擎以便应用最新的改动。 #### 修改配置文件降低安全性(临时方案) 作为权宜之计还可以考虑编辑my.ini/my.cnf 文件内的 `[mysqld]` 节点下加入一行 `secure-auth=OFF` 来禁用某些高级别的保护措施使得旧版客户端能够兼容新特性。不过这种方法并不推荐长期使用因为它会削弱系统的整体防护水平。 以上就是在Windows操作系统上处理因错误编号1045所引发的一系列连接失败现象的一些基本思路和技术手段[^1][^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起来学吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值