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

06-02 1185阅读

一、错误信息

连接MySQL时候报错如下

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

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

二、出现Access denied原因排查

1、确认密码是否正确

确保输入的密码与 root 用户的密码一致。

如果忘记密码,可以尝试重置 root 密码(见下文)。

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

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

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

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

如果 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 地址

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

        2、重新授权 root 用户,如果权限不正确,可以重新授权 root 用户

        GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

        FLUSH PRIVILEGES;

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码