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命令登录,默认使用当前系统用户名作为MySQL用户名,且不发送密码。如果MySQL的root用户设置了密码,直接输入mysql会提示1045 (using password: NO)。正确的登录命令是:mysql -u root -p,执行后提示输入密码,输入正确密码后登录。-u指定用户名,-p表示需要密码验证。如果密码在命令行直接输入:mysql -u root -p你的密码,注意-p和密码之间没有空格。
原因三: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表中没有其他异常用户。
原因六:配置文件中的密码不匹配。网站程序(如WordPress、dedecms)的数据库配置文件中填写的密码与MySQL实际密码不一致,会导致1045错误。检查配置文件中的数据库密码,如WordPress的wp-config.php中的DB_PASSWORD,dedecms的data/common.inc.php中的数据库密码。确认配置文件中的密码与MySQL实际密码一致。如果修改了MySQL密码,需要同步更新所有使用该数据库的程序配置文件。同时检查配置文件中的数据库用户名、主机名、数据库名是否正确。
站长反馈:安装MySQL后直接输入mysql登录提示1045,后来知道需要加-p参数输入密码。安装时生成的临时密码在日志文件中,找到后登录修改了密码。新手容易犯的错误是不知道MySQL默认有密码,直接输入mysql当然登录失败。
安全提示:生产环境不要使用root用户连接网站程序,为每个程序创建独立用户并授予最小权限。root用户只允许localhost登录,不要开放远程连接。删除匿名用户和测试数据库。使用强密码并定期更换。记录密码,避免忘记后需要重置。

更新时间:2026-09-02 11:55:36