一、解决方案
-
登录
mysql的时候报错csharpERROR 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 都默认支持