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 模式并恢复权限表。
相关推荐
正在走向自律6 小时前
深度剖析 KES 行标识体系:OID 与 ROWID 核心原理、实战案例及性能优化
数据库·oid·kes·rowid
一直都在5726 小时前
MySQL索引优化
android·数据库·mysql
wjp@0017 小时前
SQL server导出导入数据
运维·服务器·数据库
脑子加油站7 小时前
MySQL8数据库高级特性
数据库·mysql
REDcker7 小时前
OpenSSL:C 语言 TLS 客户端完整示例
c语言·网络·数据库
zly35007 小时前
centos7 mysql 无法被远程连接
数据库·mysql
廿一夏7 小时前
MySql的增删改查
数据库·mysql·dba
瀚高PG实验室7 小时前
HGDB 4.5.8.8开启oracle兼容执行带聚合函数的SQL导致数据库进程被信号11杀死
数据库·sql·oracle·瀚高数据库
炘爚8 小时前
日志系统整体设计步骤以及功能函数梳理
运维·服务器·数据库
_下雨天.8 小时前
PostgreSQL日常维护
数据库·postgresql