default_authentication_plugin在my.cnf中不生效的三大原因是:配置未置于[mysqld]段、未完整重启mysqld服务、云数据库禁止修改该参数;且该设置仅影响新用户,旧用户需用alter user单独修改认证方式。

在 my.cnf 中设置 default_authentication_plugin 为什么有时不生效
直接往 [mysqld] 段写 default_authentication_plugin = mysql_native_password 看似正确,但常见失效原因有三个:配置段放错位置、未重启服务、云数据库根本不允许改。尤其要注意,这个配置只影响「新创建的用户」,已存在的用户认证方式完全不变,所以即使配了,老应用连不上问题照旧。
my.cnf 配置必须放在 [mysqld] 段下
很多用户把配置误加到 [client] 或 [mysql] 段,那只是影响客户端行为,对服务器默认插件毫无作用。正确写法如下:
[mysqld] default_authentication_plugin = mysql_native_password
检查是否生效,连接 MySQL 后执行:SELECT @@default_authentication_plugin;,返回值应为 mysql_native_password。若仍是 caching_sha2_password,说明配置未加载或被覆盖。
改完必须重启 mysqld,不是 reload
sudo systemctl reload mysqld 不会重读 default_authentication_plugin,必须完整重启:
sudo systemctl stop mysqldsudo systemctl start mysqld
某些系统(如 macOS Homebrew 安装)需用 brew services restart mysql;Docker 容器则要重建或 docker exec -it mysql-container bash -c "kill -SIGTERM 1" 触发主进程重启。重启后务必验证 @@default_authentication_plugin 值。
云数据库(RDS/CDB)这条路基本走不通
阿里云 RDS、腾讯云 CDB、AWS RDS 等托管服务,my.cnf 权限受控,default_authentication_plugin 属于禁止修改参数。控制台或 API 通常也不开放该选项。此时唯一可行路径是逐个修复用户:对每个出问题的应用账号执行 ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'xxx';,再 FLUSH PRIVILEGES;。注意 'app_user'@'%' 的 host 必须和 SELECT User, Host FROM mysql.user; 查出的完全一致,否则报错“Operation ALTER USER failed for …”。











