MySQL 登录报错 ERROR 1045:Access denied for user ‘root‘@‘localhost‘(using password: YES

目录

  1. 问题描述

  2. 错误原因解析

  3. 多种解决方案

    • 方案一:重设 root 密码
    • 方案二:检查并修正用户权限
    • 方案三:修改配置文件启动选项
  4. 总结

  5. 附加建议


1. 问题描述

在使用 MySQL 时,经常会遇到以下报错:

复制代码
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

即 root 用户从 localhost 登陆时被拒绝访问。本文将分析该问题的可能原因,并给出几种常用解决方案。


2. 错误原因解析

导致 ERROR 1045 报错的常见原因包括:

  • MySQL 服务未启动或停止响应。
  • 使用了错误的用户名/密码组合。
  • 用户被限制从当前 IP 或 主机登录。
  • my.cnf / my.ini 配置文件中有禁止登录的项。
  • 数据库权限设置有误, root 用户缺少必要登录权限。

3. 多种解决方案

🧩 方案一:重设 root 用户密码(适用于忘记密码或登录失败)

步骤1: 停止 MySQL 服务

  • 在 Linux 系统:

    shell 复制代码
    sudo systemctl stop mysql
  • 在 Windows 系统:通过服务管理器停止 MySQL 服务。

步骤2: 启动 MySQL 跳过权限验证

  • 在 Linux 上执行:

    shell 复制代码
    sudo mysqld_safe --skip-grant-tables &
  • 或者编辑 my.cnf 或 my.ini,在 mysqld 下添加:

    ini 复制代码
    skip-grant-tables

    然后重启服务。

步骤3: 无密码模式连接

shell 复制代码
mysql -u root

步骤4: 修改 root 密码并刷新权限

sql 复制代码
use mysql;
update user set authentication_string = password('新密码') where user = 'root';
flush privileges;

步骤5: 重启 MySQL 服务并使用新密码登录。


🧩 方案二:检查并修正 root 用户权限

执行以下 SQL 查看当前 root 用户权限:

sql 复制代码
SHOW GRANTS FOR 'root'@'localhost';

如果权限设置不正确,可执行:

sql 复制代码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

确保 root 用户拥有从 localhost 登录的权限及执行权限。


🧩 方案三:修改配置文件中的登录限制项

检查配置文件(如 /etc/mysql/my.cnf 或 Windows 的 my.ini )中以下内容:

ini 复制代码
[mysqld]
skip-grant-tables

若添加这项,则 MySQL 会跳过权限校验启动,适用于紧急修复,但长期不建议开启。完成修改后,再次重设密码并移除该项。


4. 核心总结

  • ERROR 1045 通常是 用户名/密码错误、权限不足或配置阻止登录导致。
  • 重设密码、修正权限、或临时跳过权限验证是主要解决思路。
  • 滥用 skip-grant-tables 虽可临时修复但存在安全隐患,仅建议应急使用。

5. 附加建议

  • 定期为 root 用户更换强密码,并避免使用 root 在生产环境中直接登录。
  • 建议为每个应用或服务创建专用用户并授权,最小化权限原则。
  • 将数据库服务绑定到特定 IP 或网络,禁止 root 从 localhost 以外登录可提升安全。
  • 发生产环境时禁用 skip-grant-tables 模式并恢复权限表。
相关推荐
新中地GIS开发老师3 分钟前
地信职业百科④:GIS开发工程师
前端·数据库·gis·webgis·三维gis开发
云和恩墨11 分钟前
从“第二存储”到多智能体协作,云和恩墨充实数据基础设施产品矩阵
数据库
ClouGence18 分钟前
SAP HANA 到 Doris 数据迁移:4 种方案对比与迁移教程
数据库·后端·dba
霸道流氓气质19 分钟前
ApiPost 中配置自动获取 Token 并调用业务接口完整指南
java·服务器·数据库
我不想名字重复22 分钟前
redis缓存和数据库数据保持一致
数据库·redis·缓存
宇宙第一小趴菜43 分钟前
三、Oracle 核心原理
数据库·oracle
码出钞能力2 小时前
apache-shardingsphere-5.5.3自定义分片算法
数据库
兜有米啦2 小时前
数据库第二次作业
数据库
nVisual3 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
weixin_6683 小时前
Cursor-superpowers插件用法
数据库·人工智能