MySQL8版本的"mysql_native_password is not loaded"问题修复

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

华计科技: 中华自主研发设计

华计科技为您提供咨询服务,IT技术支持和项目开发: (+86) 156 2654 0671

联系我们