已解决|MySQL 8.4.11 密码正确仍报错1045 (28000) Access denied 终极修复方案

一、问题现象
当前环境:MySQL 8.4.11(最新8.x稳定版)
常规登录命令,输入正确密码仍报错:
bash
mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
关键解读 :
using password: YES代表你传入了密码,并非密码输错,是 MySQL 权限认证、插件、账号绑定、环境残留导致的校验失败,是 MySQL8.4 高频专属坑。
二、报错核心原因(8.4版本专属)
旧版 MySQL 密码错误直接提示密码不对,而 MySQL8.4 会因以下隐性问题统一抛出 1045:
-
auth_socket 认证劫持:root@localhost 默认使用系统免密认证,密码完全失效
-
认证插件不兼容:caching_sha2_password 异常,客户端无法校验
-
地址隔离问题:localhost(socket) 和 127.0.0.1(TCP) 是两套独立账号
-
升级/重装残留:旧 data 目录权限表未清空,账号配置冲突
三、快速故障排查对照表
| 故障现象 | 根因 | 对应解决方案 |
|---|---|---|
| 密码绝对正确,仍拒绝登录 | root 账号认证插件为 auth_socket | 使用8.4原生 caching_sha2_password 认证重置密码 |
| 127.0.0.1 能登,localhost 不能登 | 缺少 root@localhost 账号,仅存在 root@127.0.0.1 | 新建 localhost 专属 root 账号并授权 |
| 新装/升级后立刻报错 | 旧 data 目录权限数据残留冲突 | 重置权限表、强制更新密码插件 |
| 偶尔能登、偶尔报错 | caching_sha2_password 缓存异常损坏 | 使用系统默认 caching_sha2_password 统一认证 |
四、通用终极修复流程(Windows + Linux 通用)
该方案跳过权限校验,强制重置账号认证方式和密码,100%解决8.4版本此类报错。
步骤1:停止 MySQL 服务
Windows 终端(管理员):
bash
# 常规服务名
net stop mysql
# 若失败,查看真实服务名(mysql84)
services.msc
Linux 终端:
bash
systemctl stop mysqld
# 或
systemctl stop mysql
步骤2:跳过权限校验启动 MySQL
进入 MySQL 安装目录的 bin文件夹,执行命令:
Windows:
bash
mysqld --console --skip-grant-tables --shared-memory
Linux:
bash
mysqld_safe --skip-grant-tables
重要:该窗口保持打开,不要关闭!
步骤3:免密登录 MySQL
新开一个终端,直接免密登录:
bash
mysql -u root
步骤4:终极零报错流程|根治 1290 + 1524 报错(MySQL 8.4.11 官方唯一有效方案)
致命问题根源(全网旧教程全部失效) :MySQL 8.4.11 已默认移除、不再内置加载 mysql_native_password 插件 。无论是否重启服务,强行执行 IDENTIFIED WITH mysql_native_password 必然报 ERROR 1524。
8.4.11 原生仅支持:caching_sha2_password,必须放弃旧插件写法,使用新版原生流程重置密码。
跳过权限模式下严格执行以下无错 SQL:
sql
-- 1. 解锁权限限制(规避 1290 报错,必写)
FLUSH PRIVILEGES;
-- 2. 清空旧密码、清空旧认证残留(不指定任何插件,规避1524)
UPDATE mysql.user SET authentication_string = '' WHERE user = 'root' AND host = 'localhost';
-- 3. 固化操作
FLUSH PRIVILEGES;
exit;
操作完成,关闭后台 mysqld 进程。
在 MySQL 8.4.11 新版中存在两个连锁报错:
-
开
skip-grant-tables直接执行ALTER USER→ ERROR 1290 -
刷新权限后强行指定
mysql_native_password→ ERROR 1524 Plugin not loaded
核心原理 :MySQL 8.4.11 默认彻底移除、不加载mysql_native_password插件,全网旧教程全部失效。不能再强制指定插件,必须先清空旧认证、纯更新密码,重启后再切换兼容插件。
8.4.11 唯一可执行、零报错重置流程(严格按顺序复制执行):
sql
-- 1. 解锁权限限制(必须第一步)
FLUSH PRIVILEGES;
-- 2. 先清空旧认证方式、纯重置密码(不指定任何插件,规避1524报错)
UPDATE mysql.user SET authentication_string = '' WHERE user = 'root' AND host = 'localhost';
-- 3. 再次刷新权限
FLUSH PRIVILEGES;
exit;
执行完毕后关闭后台 mysqld 进程,恢复正常服务启动。
💡 自行替换 123456 为自定义安全密码,此顺序是 MySQL8.4 跳过权限改密码的唯一正确顺序。
步骤5:重启服务 + 原生插件设置密码(彻底无错收尾)
1、正常重启 MySQL 服务
bash
# Windows
net stop mysql
net start mysql
# Linux
systemctl restart mysqld
2、空密码登录(直接回车,无需输入密码)
bash
mysql -uroot -p
3、8.4.11 唯一合法改密语句(无1524报错)
sql
-- 使用系统默认 caching_sha2_password 原生认证,完全兼容8.4.11内核
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
exit;
💡 替换 123456 为自定义密码。到此:1045/1290/1524 全部彻底解决。
1、正常重启 MySQL 服务
bash
# Windows
net start mysql
# Linux
systemctl start mysqld
2、空密码登录(直接回车,不输入密码)
bash
mysql -uroot -p
3、登录成功后,执行最终修复(加载兼容插件+设置密码,彻底解决1045报错)
sql
-- 8.4.11 安全兼容写法,无1524报错
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
-- 切换为兼容旧客户端的认证插件(彻底根治连接报错)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
exit;
💡 替换 123456 为你的自定义密码,至此 1045/1290/1524 三类报错全部解决。
五、针对性专项修复(解决残留问题)
1、修复 auth_socket 免密认证坑
登录后查看账号认证方式:
sql
SELECT user, host, plugin FROM mysql.user WHERE user='root';
若 plugin=auth_socket,说明密码完全失效,执行替换:
sql
-- 8.4.11 禁止使用 mysql_native_password!会报1524
-- 正确修复 auth_socket 认证语句
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
FLUSH PRIVILEGES;
2、修复 localhost/127.0.0.1 账号隔离
MySQL 中 root@localhost(socket连接)和 root@127.0.0.1(TCP连接)是两个独立账号:
sql
# 新建 localhost root 账号(适配8.4.11原生插件)
CREATE USER 'root'@'localhost' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
六、MySQL8.4 避坑总结(必看)
-
8.4.11 核心红线规则 :彻底废弃
mysql_native_password,强行调用必报1524,仅可使用系统默认caching_sha2_password认证 -
配置文件 my.ini/my.cnf 禁止残留
skip-grant-tables,否则永久免密、权限失效 -
重装 MySQL 务必清空旧 data 目录,残留权限表是报错核心诱因
-
8.4.11 关键差异:默认未加载 mysql_native_password,跳过权限模式下不能指定该插件,会直接报1524错误,必须先清空密码、重启服务后再切换插件
七、修复结果验证
执行登录命令无报错、正常进入数据库,可正常执行建库、查表等操作,代表彻底解决 ERROR 1045 问题。
八、MySQL 8.4.11 开启外网远程访问(适配新版无报错)
本地登录正常后,默认仅本机可访问,外网/远程工具连接会报1045/2003错误,以下为8.4.11专属外网开放方案 ,兼容默认 caching_sha2_password 插件,无1524报错。
步骤1:创建远程授权账号(允许所有外网IP)
登录MySQL终端,执行以下SQL,创建可外网访问的root账号(严格适配8.4版本):
sql
-- 创建 root@% 外网账号,使用8.4默认认证插件
CREATE USER 'root'@'%' IDENTIFIED BY '自定义密码';
-- 授予全部远程权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 刷新权限生效
FLUSH PRIVILEGES;
关键说明 :
root@localhost仅本机访问,root@%代表所有外网IP均可连接,8.4版本禁止强行指定旧插件,仅用原生认证无报错。
步骤2:修改MySQL配置文件放行外网
CentOS 系统 MySQL 8.4.11 配置文件标准路径:
-
主配置文件 :
/etc/my.cnf -
扩展配置目录 :
/etc/my.cnf.d/(内部 *.cnf 配置同样生效)
若文件不存在/不确定路径,执行全局查找命令:
bash
find / -name my.cnf 2>/dev/null
打开编辑配置文件:
bash
vim /etc/my.cnf
找到 [mysqld] 节点,修改外网放行绑定地址(CentOS 专属标准写法):
ini
[mysqld]
# 注释默认本地绑定
# bind-address = 127.0.0.1
# 放行所有外网IP,开启远程访问
bind-address = 0.0.0.0
# 可选:默认端口,确认不冲突
port=3306
💡 CentOS 下优先修改 /etc/my.cnf,优先级高于 my.cnf.d 目录子配置。
找到 [mysqld] 节点,修改绑定地址:
ini
[mysqld]
# 注释原有本地绑定配置
# bind-address = 127.0.0.1
# 放行所有外网IP
bind-address = 0.0.0.0
💡 核心作用:取消仅本地回环地址限制,允许外网IP接入数据库服务。
步骤3:放行服务器防火墙端口(必做)
MySQL默认端口 3306,需手动放行端口,否则外网无法连通:
Windows服务器:防火墙高级设置,添加入站规则,放行3306端口(TCP)
Linux服务器:
bash
# 放行3306端口
firewall-cmd --permanent --add-port=3306/tcp
# 重载防火墙
firewall-cmd --reload
# 云服务器额外配置:控制台安全组放行3306端口(公网入站)
步骤4:重启MySQL服务生效
bash
# Windows
net stop mysql
net start mysql
# Linux
systemctl restart mysqld
步骤5:外网连接测试
使用外网IP+3306端口、设置的密码连接数据库,Navicat、DBeaver等工具可正常连接,无报错即为配置成功。
外网访问避坑要点(8.4.11专属)
-
无需配置
mysql_native_password,新版客户端、数据库工具已兼容caching_sha2_password,强行修改会报1524错误 -
不要删除
root@localhost本地账号,保留本地+外网双账号,兼顾本地运维和远程访问 -
云服务器必须同时放行系统防火墙 和控制台安全组,缺一不可
-
3306端口默认高危,生产环境建议限制指定IP访问,不要全网开放