MySQL 8.0+ 启用 mysql_native_password 插件并解决 “Plugin 'mysql_native_password' is not loaded” 报错
从 MySQL 8.0 开始,默认的用户认证插件已经切换为 caching_sha2_password
。这个插件安全性更高,但很多旧的驱动、客户端(如老版本的 PHP、Navicat、JDBC)并不支持。
之前有篇 解决PHP7+PDO+MySQL8环境中“SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client”问题 能解决插件激活的情况下的问题,但是今天我在宝塔安装的mysql8里面,这个插件默认是禁用的,尝试使用 mysql_native_password
认证,很可能会遇到以下报错:
Plugin 'mysql_native_password' is not loaded
本文将带你一步步排查
- MySQL 8.0 默认启用
caching_sha2_password
,而mysql_native_password
已被弃用。 - 如果遇到
Plugin 'mysql_native_password' is not loaded
,需要先确认插件是否存在,若DISABLED
则通过my.cnf
配置启用。 - 启用后才能正常修改用户认证方式。
- 长远看,应逐步迁移至
caching_sha2_password
,避免未来升级风险。
如何确认插件是否存在、状态是否启用,以及如何正确开启并为用户配置该插件。
一、确认插件是否存在
SHOW PLUGINS;
SELECT plugin_name, plugin_status
FROM information_schema.plugins
WHERE plugin_name = 'mysql_native_password';
- 如果能查到
mysql_native_password
,但plugin_status=DISABLED
,说明插件已存在但未启用。 - 如果完全没有结果,说明插件未安装,需要手动安装。
二、安装或启用插件
1. 安装插件(如未安装)
先查看插件目录:
SHOW VARIABLES LIKE 'plugin_dir';
进入目录确认插件文件是否存在,然后执行:
INSTALL PLUGIN mysql_native_password SONAME 'mysql_native_password';
⚠️ 不同系统上插件文件名可能不同,例如 Linux 下可能是 authentication_mysql_native_password.so
。
2. 启用插件(MySQL 8.4+ 推荐方式)
在配置文件 my.cnf
(或 Windows 的 my.ini
)中 [mysqld]
段增加:
[mysqld]
mysql_native_password=ON
然后重启 MySQL 服务。
注意:不要使用 default_authentication_plugin=mysql_native_password
,在新版本中可能导致 MySQL 无法启动。
重启后再次执行:
SHOW PLUGINS;
确认 mysql_native_password
的 plugin_status
已变为 ACTIVE。
三、配置用户认证方式
插件启用后,为需要兼容的用户切换认证方式:
ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;
验证:
SELECT user, host, plugin
FROM mysql.user
WHERE user='root';
确认 plugin
列显示为 mysql_native_password
。
四、推荐做法:迁移到 caching_sha2_password
虽然我们可以启用 mysql_native_password
作为过渡方案,但 MySQL 官方已经明确标注该插件为 deprecated(弃用),未来版本可能被彻底移除。
因此,长期方案建议:
ALTER USER 'youruser'@'%'
IDENTIFIED WITH caching_sha2_password BY '新密码';
这样可以避免后续升级带来的兼容性问题。
版权声明:本文为原创文章,版权归 全栈开发技术博客 所有。
本文链接:https://www.lvtao.net/database/mysql8-enable-mysql-native-password-plugin.html
转载时须注明出处及本声明