MySQL配置default_authentication_plugin错误分析与解决

0 次阅读

MySQL 8.0版本发布后,引入了新的默认身份认证插件机制,其中caching_sha2_password逐渐取代旧版本中的mysql_native_password成为默认认证方式。由于部分客户端、开发框架以及数据库连接驱动仍然依赖旧认证插件,因此在配置MySQL时经常会遇到default_authentication_plugin相关错误。

这类问题通常表现为配置文件无法启动、参数不识别、数据库连接失败等情况。了解错误产生原因,并掌握正确解决方式,对于维护MySQL服务稳定运行具有重要意义。

一、default_authentication_plugin参数作用解析

default_authentication_plugin是MySQL用于指定新创建用户默认身份认证插件的配置参数。

在MySQL 5.7版本中,默认认证插件通常为:

mysql_native_password

而MySQL 8.0开始,默认认证方式调整为:

caching_sha2_password

新的认证插件在安全性方面进行了增强,包括更强的密码加密算法和缓存认证机制。但由于生态兼容性问题,一些旧版本应用连接MySQL 8.0时会出现认证失败。

例如,使用老版本JDBC驱动连接MySQL时,可能出现:

Public Key Retrieval is not allowed

或者:

Client does not support authentication protocol requested by server

此时很多开发者会尝试修改default_authentication_plugin参数。

二、常见default_authentication_plugin错误原因

1. MySQL版本不支持该配置项

不同MySQL版本对于认证插件配置支持情况不同。

在MySQL 8.0之前,该参数的使用方式和支持范围存在差异。如果在某些版本中配置:

[mysqld]
default_authentication_plugin=mysql_native_password

可能导致启动时报错:

unknown variable 'default-authentication-plugin=mysql_native_password'

原因通常是当前MySQL版本已经废弃或者移除了该参数。

2. 参数名称书写错误

MySQL配置参数对名称格式比较敏感。

正确写法:

default_authentication_plugin=mysql_native_password

部分旧资料中可能使用:

default-authentication-plugin=mysql_native_password

虽然MySQL部分参数支持短横线形式,但不同版本兼容情况可能不同,建议优先使用官方推荐格式。

3. 配置文件修改位置错误

MySQL可能读取多个配置文件,例如:

Linux环境:

/etc/my.cnf
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf

Windows环境:

my.ini
my.cnf

如果修改的配置文件并不是当前MySQL实例实际加载的文件,则不会生效。

可以通过以下命令查看配置文件来源:

mysql --help | grep my.cnf

或者登录MySQL后查看:

SHOW VARIABLES LIKE 'pid_file';

确认当前运行实例。

三、解决default_authentication_plugin错误的方法

方法一:升级MySQL客户端驱动

如果应用程序连接失败,优先推荐升级客户端驱动,而不是修改服务器认证方式。

例如Java项目中,如果使用MySQL Connector/J:

旧版本:


    mysql
    mysql-connector-java
    5.1.49

建议升级:


    com.mysql
    mysql-connector-j
    8.0.33

新版驱动原生支持:

caching_sha2_password

可以避免修改MySQL服务器认证策略。

方法二:修改用户认证插件

如果应用必须兼容旧环境,可以针对指定用户修改认证方式。

登录MySQL:

mysql -uroot -p

查看用户认证插件:

SELECT user,host,plugin FROM mysql.user;

修改用户:

ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password
BY '你的密码';

刷新权限:

FLUSH PRIVILEGES;

重新连接即可。

这种方式比修改全局默认配置更加安全,因为只影响指定账户。

方法三:修改MySQL配置文件

如果希望新创建用户默认使用旧认证方式,可以修改:

[mysqld]

default_authentication_plugin=mysql_native_password

然后重启MySQL:

Linux:

systemctl restart mysqld

Windows:

net stop mysql
net start mysql

重启后检查:

SHOW VARIABLES LIKE 'default_authentication_plugin';

如果返回:

mysql_native_password

说明配置生效。

需要注意的是,该配置只影响之后创建的新用户,已经存在的用户不会自动修改。

四、MySQL 8.0.34及之后版本的特殊情况

MySQL 8.0后期版本逐渐调整了认证插件策略,部分版本对于mysql_native_password支持进行了限制。

如果遇到:

Plugin 'mysql_native_password' is not loaded

说明服务器端可能已经禁用了该插件。

此时建议:

  1. 升级客户端连接组件;

  2. 使用默认的caching_sha2_password

  3. 修改应用连接参数支持新的认证方式。

例如Spring Boot项目中:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456

同时确保MySQL驱动版本匹配MySQL服务器版本。

五、Docker环境中default_authentication_plugin配置

很多开发环境通过Docker部署MySQL,此时可以直接通过启动参数指定:

docker run 
--name mysql8 
-e MYSQL_ROOT_PASSWORD=123456 
-d mysql:8.0 
--default-authentication-plugin=mysql_native_password

也可以通过配置文件挂载:

docker run 
-v /data/mysql/my.cnf:/etc/mysql/conf.d/my.cnf 
-e MYSQL_ROOT_PASSWORD=123456 \