直接修改用户认证插件比改全局配置更安全、见效快,尤其适合线上或云数据库环境;需先执行select user, host, plugin from mysql.user;确认问题用户插件是否为caching_sha2_password,再用alter user 'user'@'host' identified with mysql_native_password by 'pwd';切换,并立即执行flush privileges;。

直接改用户插件比改全局配置更安全、见效快,尤其适合线上环境或云数据库。
查当前用户的认证插件是什么
连上 MySQL 后先确认问题是否真出在这里:执行 SELECT User, Host, plugin FROM mysql.user;。重点看报错用户那一行的 plugin 字段是不是 caching_sha2_password。如果看到 auth_socket(常见于本地 root),那不是同一个问题,别套用下面的语句。
ALTER USER 切换单个用户的认证方式
必须用带 WITH 的完整语法,SET PASSWORD 或只改 authentication_string 都不生效:
- 执行
ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_actual_password'; -
'app_user'@'%'中的Host必须和建用户时完全一致,比如是'app_user'@'192.168.1.%'就不能写成'%' - 密码必须显式提供,即使想保留原密码,也得重新输一遍——MySQL 8.0 不再允许空密码或跳过
BY - 执行完立刻
FLUSH PRIVILEGES;,某些版本(尤其是小版本补丁)不刷新不会生效
my.cnf 改 default_authentication_plugin 只影响新用户
如果你控制服务器且确定所有客户端都适配,可以加这行到 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf 的 [mysqld] 段:
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
default_authentication_plugin = mysql_native_password
但注意:
- 改完必须
sudo systemctl restart mysqld(不是reload),否则不生效 - 重启后新建的用户才默认用
mysql_native_password,已有用户plugin字段不变,仍需单独ALTER USER - 阿里云 RDS、腾讯云 CDB 等托管服务通常禁用该配置项,这条路走不通
客户端连接仍失败?检查驱动和命令行配置
有些老版本 JDBC、PHP mysqli 或 Python PyMySQL 会卡在握手阶段,光改服务端还不够:
- Java JDBC 连接串加参数:
?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false(allowPublicKeyRetrieval=true是关键) - 命令行客户端可临时指定插件:
mysql -u app_user -p --default-auth=mysql_native_password - 或在
~/.my.cnf加[client]段:default_authentication_plugin = mysql_native_password
最容易被忽略的是:改了用户插件却没核对 Host 是否完全匹配,或者忘了 FLUSH PRIVILEGES;云数据库用户则根本别碰 my.cnf,专注修单个用户就行。










