Mysql ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

一、解决方案

  • 登录 mysql 的时候报错

    csharp 复制代码
    ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
  • 原因:MySQL8.4 版本开始及以后官方将对 mysql_native_password 验证插件不再默认启用,如果要重新启用则需添加 mysql-native-password=ON 然后启动服务器,也可以在配置文件中添加此代码。

    ini 复制代码
    [mysqld]
    # 字符集配置(必须)
    character-set-server = utf8mb4
    collation-server     = utf8mb4_0900_ai_ci
    # MySQL8.4版本及以上添加,启用验证密码插件(非8.4及以上无需添加)
    mysql_native_password=ON
    
    # 远程访问配置(如需远程访问,必须添加)
    # port=3306                    # 端口号,默认 3306,可不写
    # bind-address=0.0.0.0         # 允许远程连接,默认仅本地,如需远程必须设置
    
    [client]
    # 客户端默认字符集(推荐)
    default-character-set = utf8mb4
    
    [mysql]
    # mysql 命令行客户端字符集(可选,会覆盖 [client] 段)
    default-character-set = utf8mb4
    
    [mysqldump]
    # mysqldump 备份工具字符集(推荐,确保备份文件编码正确)
    default-character-set = utf8mb4
  • 重启 mysql 服务,登录即可。

    sh 复制代码
    # 无密码
    $ mysql -u root
    
    # 有密码
    $ mysql -u root -p

二、mysql_native_password 迁移至 caching_sha2_password

一、目标

👉 把当前账号(一般是 root@localhost):

  • mysql_native_password

改成:

  • caching_sha2_password(MySQL 8 官方默认 & 长期支持)

然后:

  • ❌ 不再依赖 mysql_native_password=ON
  • ❌ 以后升级 MySQL 不会再炸

二、第 1 步:确认当前在用什么插件(必须)

先登录 MySQL(你现在是能登录的):

sh 复制代码
mysql -u root -p

然后执行:

sql 复制代码
SELECT user, host, plugin
FROM mysql.user
WHERE user = 'root';

你现在看到的应该是:

ini 复制代码
plugin = mysql_native_password

示例输出:

sql 复制代码
+------+-----------+-----------------------+
| user | host      | plugin                |
+------+-----------+-----------------------+
| root | localhost | mysql_native_password |
+------+-----------+-----------------------+

三、第 2 步:修改 root 的认证插件(关键步骤)

推荐写法(MySQL 8.4 正确姿势)

sql 复制代码
ALTER USER 'root'@'localhost'
IDENTIFIED WITH caching_sha2_password
BY '一个强密码';

⚠️ 注意

  • 这里必须显式写 WITH caching_sha2_password
  • 密码要符合策略(大小写 + 数字)

例如:

方案一:设置密码

sql 复制代码
ALTER USER 'root'@'localhost'
IDENTIFIED WITH caching_sha2_password
BY 'Root@123456';

方案二:不设置密码(无密码)

sql 复制代码
ALTER USER 'root'@'localhost'
IDENTIFIED WITH caching_sha2_password;

执行成功后不会有输出,这是正常的。

四、第 3 步:立即刷新权限(保险)

sql 复制代码
FLUSH PRIVILEGES;

如果报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 说明必须要重置密码,不重置密码不可以刷新,上面的指令中选那个修改密码就行了。

五、第 4 步:验证是否修改成功(非常重要)

sql 复制代码
SELECT user, host, plugin
FROM mysql.user
WHERE user = 'root';

你应该看到:

ini 复制代码
plugin = caching_sha2_password

六、第 5 步:关闭 mysql_native_password(收尾)

现在你已经不依赖它了,可以安全移除。

1️⃣ 编辑配置文件(你之前用的那个)

sh 复制代码
nano /opt/homebrew/etc/my.cnf

把这行删掉或注释掉:

ini 复制代码
mysql_native_password=ON

2️⃣ 重启 MySQL

sh 复制代码
brew services restart mysql@8.4

或者:

sh 复制代码
brew restart mysql@8.4

七、第 6 步:最终验证(这一步走完就彻底干净)

sh 复制代码
mysql -u root -p

如果能正常登录,且:

sql 复制代码
SELECT user, host, plugin FROM mysql.user WHERE user='root';

显示:

复制代码
caching_sha2_password

恭喜,你已经完全摆脱 mysql_native_password

八、如果你还有其他用户(建议一起改)

例如:

sql 复制代码
SELECT user, host, plugin FROM mysql.user;

对所有仍是 mysql_native_password 的账号,统一改:

sql 复制代码
ALTER USER '用户名'@'host'
IDENTIFIED WITH caching_sha2_password
BY '新密码';

九、常见坑(你可以放心,你这次不会再踩)

  • ERROR 1524 Plugin not loaded

    • 👉 只会在还在用 mysql_native_password 时出现
  • 客户端不支持

    • 👉 MySQL 8 / Go / Java / 新版 PHP 都默认支持
相关推荐
小韩博2 小时前
小迪第42课:PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作
sql·mysql·网络安全·架构·php
北极糊的狐3 小时前
若依报错org.springframework.dao.DataIntegrityViolationException
数据库·mysql
嘻哈baby4 小时前
MySQL索引设计避坑指南:这些错误别再犯了
mysql
q_19132846954 小时前
基于Springboot+Vue.js的工业人身安全监测系统
vue.js·spring boot·后端·mysql·计算机毕业设计·串口通讯
子夜江寒5 小时前
Python 操作 MySQL 数据库
数据库·python·mysql
野蛮人6号5 小时前
p29 docker08-docker基础-本地目录挂载 无法正确添加mysql 点击更新后data没有正常显示
mysql·docker·容器
Alex Gram5 小时前
SQL Server实时同步到MySQL:构建高效跨数据库数据流通方案
数据库·mysql·sqlserver
Lisonseekpan5 小时前
UUID vs 自增ID做主键,哪个好?
java·数据库·后端·mysql
cnxy1885 小时前
MySQL排序规则深度解析:utf8mb4_0900_ai_ci vs utf8mb4_general_ci完整对比指南
mysql·ci/cd