MySQL报错ERROR 1045 (28000): Access Denied的终极解决方案
mac 数据库又忘记密码了,记录一下更改密码! 核心思路是:
- 跳过权限验证进入 MySQL。
- 修复用户或密码。
- 恢复权限表。
错误场景复现
执行以下命令时被拒绝访问:
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
输入密码后提示:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
原因分析
- 密码错误:输入的
root密码不正确。 - 权限缺失:
root@localhost用户不存在或权限被限制。 - MySQL 服务异常:权限表未正确加载或损坏。
- 路径问题:使用了错误的 MySQL 客户端或服务路径。
解决方案(亲测有效)
步骤 1:重置 root 密码(核心步骤)
停止 MySQL 服务:
sudo /usr/local/mysql/support-files/mysql.server stop
如果提示找不到命令,尝试:
sudo brew services stop mysql # Homebrew 安装的 MySQL
以安全模式启动 MySQL(跳过权限验证):
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
成功启动后,终端会卡住(显示 Starting mysqld daemon with databases...),这是正常现象。
无密码登录 MySQL:
/usr/local/mysql/bin/mysql -u root
更新 root 密码(MySQL 5.7+):
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES; exit;
如果报错 ERROR 1396,可能是用户不存在,需先创建用户(见步骤 2)。
重启 MySQL 服务:
sudo /usr/local/mysql/support-files/mysql.server restart
步骤 2:检查 root 用户权限(备用方案)
如果重置密码后仍无法登录,可能是 root@localhost 用户不存在或权限不足:
以安全模式登录后执行:
SELECT host, user FROM mysql.user;
如果缺少 root@localhost,手动创建:
CREATE USER 'root'@'localhost' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
步骤 3:验证 MySQL 路径
确认客户端路径是否正确:
which mysql # 应返回 /usr/local/mysql/bin/mysql 或 /usr/local/opt/mysql/bin/mysql
如果路径不一致,使用绝对路径执行命令:
sudo /usr/local/mysql/bin/mysql -u root -p
步骤 4:检查文件权限
确保 reset.sql 文件可读:
ls -l /var/lib/mysql-files/reset.sql sudo chmod 644 /var/lib/mysql-files/reset.sql # 如果权限不足
步骤 5:查看 MySQL 错误日志
定位更深层次的问题:
sudo tail -n 50 /usr/local/mysql/data/*.err
到此这篇关于MySQL报错ERROR 1045 (28000): Access Denied的终极解决方案的文章就介绍到这了,更多相关MySQL报错ERROR 1045内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
深入研究mysql中的varchar和limit(容易被忽略的知识)
这篇文章主要介绍了深入研究mysql中的varchar和limit(容易被忽略的知识),本文探究了varchar(5)可以存储多少个汉字、多少个字母数字和mysql中的limit你真的会用吗两个知识点,需要的朋友可以参考下2015-03-03


最新评论