MySQL登录报错ERROR 1045 (28000)的解决方法

许南星
许南星
发布时间:2026-10-13| 6人浏览过
原创

本文旨在解决MySQL登录时报错 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 的问题。该错误常因数据库中存在的空用户(Anonymous User)干扰了权限验证机制所致。下面介绍如何通过停止MySQL服务、移除空用户并重启来恢复访问。

问题现象

在Linux系统中,即使已知root用户密码,使用命令 mysql -u root -p 登录时仍可能频繁出现以下报错:

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

这种 intermittent(间歇性)失败或部分情况下能登录的现象,往往指向身份验证表的配置异常。

解决方案原理

当MySQL的 user 表中存在 user 字段为空的用户记录时,连接请求可能会匹配到这些匿名账户,从而拒绝使用 root 身份的密码验证。我们需要以“跳过授权表”的方式进入数据库,手动清理这些空用户记录。

详细操作步骤

第1步:停止MySQL服务

为了安全地修改系统级配置,首先需要暂停正在运行的MySQL进程。根据系统环境执行以下命令:

# service mysql stop

第2步:以跳过授权模式启动MySQL

使用 mysqld_safe 启动服务,并通过参数 --skip-grant-tables 暂时忽略权限检查,允许无需密码直接访问。同时建议加上 --skip-networking 以提高安全性,仅允许本地访问。

# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

此时后台会启动一个新的MySQL进程,由于跳过了权限验证,可以直接登录。

第3步:登录MySQL服务器

在新终端中,直接输入登录命令。由于跳过了授权表,无需输入密码即可进入命令行:

# mysql -u root mysql

第4步:定位空用户数据

进入数据库后,切换到 mysql 系统库,并查询用户表以确认是否存在空用户:

mysql> use mysql;
mysql> select user,host,password from user;

预期结果中,若发现 user 列为空的记录,即说明存在空用户问题。示例如下:

+------+-----------------------+----------+
| user | host                  | password |
+------+-----------------------+----------+
| root | %                     | mima     |
|      | localhost             |          |
|      | localhost.localdomain |          |
+------+-----------------------+----------+

第5步:删除空用户记录

找到所有 user 值为空的行并将其删除,以消除对身份验证的干扰:

mysql> delete from user where user='';

执行成功后,建议执行 flush privileges; 确保内存中的权限表同步(虽然重启也会生效,但这是个好习惯):

mysql> flush privileges;

第6步:退出并正常重启MySQL

退出当前的命令行界面,然后重新启动正常的MySQL服务:

mysql> quit
# service mysql start

完成验证

服务重启后,再次尝试使用正常命令和密码进行登录:

mysql -u root -p

若能成功进入 mysql> 提示符,则说明问题已解决。

简要总结

以上关于解决MySQL登录ERROR 1045错误的详细内容。如果在操作过程中遇到其他MySQL配置或性能优化问题,欢迎继续关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。