
一、问题现象
当前环境:mysql 8.4.11(最新8.x稳定版)
常规登录命令,输入正确密码仍报错:
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 终端(管理员):
# 常规服务名 net stop mysql # 若失败,查看真实服务名(mysql84) services.msc
linux 终端:
systemctl stop mysqld # 或 systemctl stop mysql
步骤2:跳过权限校验启动 mysql
进入 mysql 安装目录的 bin文件夹,执行命令:
windows:
mysqld --console --skip-grant-tables --shared-memory
linux:
mysqld_safe --skip-grant-tables
重要:该窗口保持打开,不要关闭!
步骤3:免密登录 mysql
新开一个终端,直接免密登录:
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:
-- 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 user → error 1290
2. 刷新权限后强行指定 mysql_native_password → error 1524 plugin not loaded
核心原理:mysql 8.4.11 默认彻底移除、不加载mysql_native_password插件,全网旧教程全部失效。不能再强制指定插件,必须先清空旧认证、纯更新密码,重启后再切换兼容插件。
8.4.11 唯一可执行、零报错重置流程(严格按顺序复制执行):
-- 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 服务
# windows net stop mysql net start mysql # linux systemctl restart mysqld
2、空密码登录(直接回车,无需输入密码)
mysql -uroot -p
3、8.4.11 唯一合法改密语句(无1524报错)
-- 使用系统默认 caching_sha2_password 原生认证,完全兼容8.4.11内核 alter user 'root'@'localhost' identified by '123456'; flush privileges; exit;
替换 123456 为自定义密码。到此:1045/1290/1524 全部彻底解决。
1、正常重启 mysql 服务
# windows net start mysql # linux systemctl start mysqld
2、空密码登录(直接回车,不输入密码)
mysql -uroot -p
3、登录成功后,执行最终修复(加载兼容插件+设置密码,彻底解决1045报错)
-- 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 免密认证坑
登录后查看账号认证方式:
select user, host, plugin from mysql.user where user='root';
若 plugin=auth_socket,说明密码完全失效,执行替换:
-- 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连接)是两个独立账号:
# 新建 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版本):
-- 创建 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 配置同样生效)
若文件不存在/不确定路径,执行全局查找命令:
find / -name my.cnf 2>/dev/null
打开编辑配置文件:
vim /etc/my.cnf
找到 [mysqld] 节点,修改外网放行绑定地址(centos 专属标准写法):
[mysqld] # 注释默认本地绑定 # bind-address = 127.0.0.1 # 放行所有外网ip,开启远程访问 bind-address = 0.0.0.0 # 可选:默认端口,确认不冲突 port=3306
centos 下优先修改 /etc/my.cnf,优先级高于 my.cnf.d 目录子配置。
找到 [mysqld] 节点,修改绑定地址:
[mysqld] # 注释原有本地绑定配置 # bind-address = 127.0.0.1 # 放行所有外网ip bind-address = 0.0.0.0
核心作用:取消仅本地回环地址限制,允许外网ip接入数据库服务。
步骤3:放行服务器防火墙端口(必做)
mysql默认端口 3306,需手动放行端口,否则外网无法连通:
windows服务器:防火墙高级设置,添加入站规则,放行3306端口(tcp)
linux服务器:
# 放行3306端口 firewall-cmd --permanent --add-port=3306/tcp # 重载防火墙 firewall-cmd --reload # 云服务器额外配置:控制台安全组放行3306端口(公网入站)
步骤4:重启mysql服务生效
# 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访问,不要全网开放
到此这篇关于mysql8.4登录密码正确仍报错1045 \(28000\) access denied的终极修复方案的文章就介绍到这了,更多相关mysql登录报错1045内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论