MySQL 报错 ERROR 1045 (28000): Access Denied 终极解决方案

mac 数据库又忘记密码了,记录一下更改密码! 核心思路是:

  1. 跳过权限验证进入 MySQL。
  2. 修复用户或密码。
  3. 恢复权限表。

错误场景复现

执行以下命令时被拒绝访问:

bash 复制代码
mysql -u root -p < /var/lib/mysql-files/reset.sql
# 或
sudo /usr/local/mysql/bin/mysql -u root -p < /var/lib/mysql-files/reset.sql

输入密码后提示:

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

原因分析

  1. 密码错误 :输入的 root 密码不正确。
  2. 权限缺失root@localhost 用户不存在或权限被限制。
  3. MySQL 服务异常:权限表未正确加载或损坏。
  4. 路径问题:使用了错误的 MySQL 客户端或服务路径。

解决方案(亲测有效)

步骤 1:重置 root 密码(核心步骤)

  1. 停止 MySQL 服务

    bash 复制代码
    sudo /usr/local/mysql/support-files/mysql.server stop

    如果提示找不到命令,尝试:

    bash 复制代码
    sudo brew services stop mysql  # Homebrew 安装的 MySQL
  2. 以安全模式启动 MySQL(跳过权限验证)

    bash 复制代码
    sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &

    成功启动后,终端会卡住(显示 Starting mysqld daemon with databases...),这是正常现象。

  3. 无密码登录 MySQL

    bash 复制代码
    /usr/local/mysql/bin/mysql -u root
  4. 更新 root 密码(MySQL 5.7+):

    sql 复制代码
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
    FLUSH PRIVILEGES;
    exit;

    如果报错 ERROR 1396,可能是用户不存在,需先创建用户(见步骤 2)。

  5. 重启 MySQL 服务

    bash 复制代码
    sudo /usr/local/mysql/support-files/mysql.server restart

步骤 2:检查 root 用户权限(备用方案)

如果重置密码后仍无法登录,可能是 root@localhost 用户不存在或权限不足:

  1. 以安全模式登录后执行:

    sql 复制代码
    SELECT host, user FROM mysql.user;
  2. 如果缺少 root@localhost,手动创建:

    sql 复制代码
    CREATE USER 'root'@'localhost' IDENTIFIED BY '你的密码';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

步骤 3:验证 MySQL 路径

  1. 确认客户端路径是否正确:

    bash 复制代码
    which mysql
    # 应返回 /usr/local/mysql/bin/mysql 或 /usr/local/opt/mysql/bin/mysql
  2. 如果路径不一致,使用绝对路径执行命令:

    bash 复制代码
    sudo /usr/local/mysql/bin/mysql -u root -p

步骤 4:检查文件权限

确保 reset.sql 文件可读:

bash 复制代码
ls -l /var/lib/mysql-files/reset.sql
sudo chmod 644 /var/lib/mysql-files/reset.sql  # 如果权限不足

步骤 5:查看 MySQL 错误日志

定位更深层次的问题:

bash 复制代码
sudo tail -n 50 /usr/local/mysql/data/*.err

相关推荐
0xDevNull5 小时前
MySQL数据冷热分离详解
后端·mysql
一江寒逸5 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain5 小时前
linux个人心得22 (mysql)
数据库·mysql
做个文艺程序员6 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
MaCa .BaKa7 小时前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发
一江寒逸7 小时前
零基础从入门到精通MySQL(上篇):筑基篇——吃透核心概念与基础操作,打通SQL入门第一关
数据库·sql·mysql
爱莉希雅&&&8 小时前
linux中MySQL数据库备份恢复的四种方法(更新中)
linux·数据库·mysql·数据库备份·mysqldumper
枕布响丸辣8 小时前
Python 操作 MySQL 数据库从入门到精通
数据库·python·mysql
Java开发追求者9 小时前
windows卸载mysql教程
mysql·mysql卸载
草莓熊Lotso10 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·linux·运维·服务器·数据库·c++·mysql