我的知识记录

Windows环境MySQL 1045错误_新手也能解决_各种环境下的处理_实用教程

MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)是MySQL登录时最常见的错误之一。这个错误表示使用root用户从localhost连接MySQL时,访问被拒绝,且没有使用密码(using password: NO)。原因可能是root密码错误、root用户不存在、权限表损坏、MySQL配置错误、匿名用户干扰等。本文详细讲解这个错误的原因分析和解决方法。

错误原理:MySQL的用户认证基于用户名+主机名+密码的组合。'root'@'localhost'和'root'@'%'是两个不同的用户,有各自的密码和权限。当客户端连接MySQL时,MySQL根据客户端的用户名和来源IP匹配用户表中的记录,然后验证密码。1045错误表示匹配到了用户但密码验证失败,或者没有匹配到用户但存在匿名用户(''@'localhost')导致认证失败。using password: NO表示客户端没有发送密码,using password: YES表示发送了密码但不正确。

原因三:root用户被删除或host不匹配。MySQL的用户表中可能没有'root'@'localhost'这个用户,或者root用户的host字段不是localhost。使用skip-grant-tables启动MySQL后,查询用户表:SELECT User, Host FROM mysql.user; 查看是否有root用户及其host值。如果没有root用户,创建:CREATE USER 'root'@'localhost' IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;。如果root用户的host是'%'而不是'localhost',从localhost连接时可能匹配到匿名用户导致失败,建议同时创建'root'@'localhost'和'root'@'%'两个用户。

原因四:匿名用户干扰。MySQL中可能存在匿名用户(''@'localhost'或''@'%'),当从localhost连接时,如果用户名不匹配,会匹配到匿名用户,导致密码验证失败。使用skip-grant-tables启动后,查询并删除匿名用户:DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;。匿名用户是MySQL安装时默认创建的,用于测试,生产环境应该删除。同时确认mysql.user表中没有其他异常用户。

原因七:skip-grant-tables未移除或权限未刷新。重置密码后忘记移除my.cnf/my.ini中的skip-grant-tables配置,重启MySQL后仍然跳过权限验证,可能导致异常。或者修改密码后没有执行FLUSH PRIVILEGES,权限表未重新加载,修改不生效。重置密码完成后,确认移除skip-grant-tables配置,执行FLUSH PRIVILEGES,重启MySQL服务,使用新密码正常登录。Windows环境下,skip-grant-tables添加在my.ini的[mysqld]段下,重置后务必删除。

运维案例:一个客户重置MySQL密码后仍然1045,排查后发现是my.cnf中的skip-grant-tables没有移除,而且修改密码时用了PASSWORD()函数(MySQL 8.0已废弃)。移除skip-grant-tables,用ALTER USER重新修改密码,问题解决。MySQL 8.0的密码修改方式和旧版本不同,需要注意。

操作提醒:重置MySQL密码时,skip-grant-tables方式启动后任何人都可以无密码登录,操作完成后立即移除配置并重启。修改密码后执行FLUSH PRIVILEGES刷新权限。MySQL 8.0使用ALTER USER修改密码,不要使用废弃的PASSWORD()函数。

Windows环境MySQL 1045错误_新手也能解决_各种环境下的处理_实用教程

标签:

更新时间:2026-08-27 11:14:47

上一篇:IIS屏蔽IP段配置方法_Apache IIS屏蔽IP访问教程详解

下一篇:FTP Socket不能连接DNS解析失败解决_FTP Socket不能连接教程详解