MySQL8版本的"mysql_native_password is not loaded"问题修复
问题描述:
MySQL 8 版本,用户连接时,提示以下错误信息均为该问题导致
第一种: PHP连接时
The server requested authentication method unknown to the client
第二种: MySQL配置用户时
mysql_native_password is not loaded
第三种,MySQLi连接时提示
mysqli_sql_exception Plugin 'mysql_native_password' is not loaded.
第四种,在日志中查看到相关信息
[Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
适用范围:
1,系统开发中,使用的是低版本的MySQL开发,生产环境使用的是 高版本的MySQL
如适配MySQL建议为 MySQL5.6/5.7版本,而生产环境为MySQL8以及以上
2,日志或相关的提示信息中,包含了: mysql_native_password 关键字
导致原因:
MySQL8.4以及以上版本(2024年 LTS版)中 变更变化功能为: 默认情况禁用“MySQL Native Password” 插件。
修复方法:
修复方法分为两种:
第一种,将开发的系统中的MySQL用户授权从 mysql_native_password 升级为 caching_sha2_password 方式。适用于开发者。
第二种,如果你的系统无法再次编程,或者闭源等原因,无法修改授权方式,可以启用MySQL的
mysql_native_password
的插件功能。适用于运维,部署,测试等。
重新启用 mysql_native_password
功能
找到 my.conf 或者 my.ini 的配置文件,在条目 [mysqld] 中加入 mysql_native_password=ON
示例
[mysqld]
mysql_native_password=ON
另外需要将MySQL的用户修改授权认证方法,通过以下MySQL查询支持mysql_native_password的用户
SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
如果没有列出你的用户,可以使用以下MySQL语句进行调整
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
其中:
'user'
是要修改的用户,例如'root'。'host'
是该用户的主机,例如'localhost' 或'%' (表示任何主机)。'password'
是用户的密码。如果用户已存在且有密码,则此处的密码应与现有密码一致。如果用户不存在,则会创建新用户并设置该密码。mysql_native_password
是要使用的身份验证插件。
最后,刷新权限生效
FLUSH PRIVILEGES;
Comment