# 已解决|MySQL 8\.4\.11 密码正确仍报错1045 \(28000\) Access denied 终极修复方案

已解决|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:

  1. auth_socket 认证劫持:root@localhost 默认使用系统免密认证,密码完全失效

  2. 认证插件不兼容:caching_sha2_password 异常,客户端无法校验

  3. 地址隔离问题:localhost(socket) 和 127.0.0.1(TCP) 是两套独立账号

  4. 升级/重装残留:旧 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 新版中存在两个连锁报错:

  1. skip-grant-tables 直接执行 ALTER USERERROR 1290

  2. 刷新权限后强行指定 mysql_native_passwordERROR 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访问,不要全网开放

相关推荐
JMchen1231 小时前
2026年六款主流AI编程工具深度实测:Cursor、Copilot、Claude Code等对比与选型思考
android·kotlin·copilot·ai编程·开发工具·cursor·claude code
leoZ2311 小时前
2026-09-08-mysql-57-init-walkthrough
前端·javascript·数据库·vue.js·opencv·mysql·adb
她说..2 小时前
MySQL 与 Java 的 JSON 数据处理
java·mysql·json·springboot
mmsx2 小时前
osmdroid 地图实战 05|让地图动起来:三个实时能力 + 六条工程排雷清单
android
码农coding2 小时前
android12 SystemUI组件之StatusBar启动
android
hai_android2 小时前
Kotlin 协程上下文:从 plus 到 CombinedContext,彻底搞懂左偏结构
android·kotlin
2501_915921432 小时前
抓包工具对比:Charles、TraceEagle、Wireshark、Fiddler 与 Proxyman
网络协议·计算机网络·网络安全·ios·adb·https·udp
淡淡的香烟2 小时前
AndroidKMP之网络请求
android·网络
basketball6162 小时前
AI Infra 推理部署技术总结:2. vLLM 内核——PagedAttention 与调度器原理
android·人工智能·vllm·ai infra