mysql 8.0如何修改默认身份验证插件_将caching_sha2_password改为mysql_native_password

直接改用户认证方式最稳妥,不用动全局配置,也不用重启 MySQL 服务。 云数据库(如阿里云 RDS、腾讯云 CDB)通常禁用 my.cnf 修改权限,这条路根本走不通;而 ALTER USER 方式在所有 MySQL 8.0+ 环境下都生效,且立竿见影。

ALTER USER 切换单个用户的认证插件

这是修复连接失败最快、最通用的方法。错误现象通常是:Plugin caching_sha2_password could not be loaded 或 Client does not support authentication protocol —— 说明客户端(比如旧版 JDBC、PyMySQL、PHP mysqli)压根不认这个插件。

ALTER USER 必须显式指定 WITH mysql_native_password,只用 SET PASSWORD 不会改认证插件用户名和 host 必须完全匹配,查当前用户用:SELECT User, Host FROM mysql.user;,比如 ‘app_user’@’192.168.1.%’ 和 ‘app_user’@’%’ 是两个不同用户执行后必须跟 FLUSH PRIVILEGES;,否则部分 MySQL 8.0.x 版本(尤其是小版本低于 8.0.23 的)不会立即生效如果应用连的是 localhost,注意 MySQL 8.0 对 localhost 的解析更严格(可能走 socket 而非 TCP),测试时可临时改成 127.0.0.1

my.cnf 修改 default_authentication_plugin(仅限自建库)

如果你能登录服务器并重启 mysqld,且确认所有新用户都应默认用老插件,可以改全局配置。但注意:这**只影响后续新建的用户**,已有用户仍需单独 ALTER USER。

配置项必须放在 [mysqld] 段下,写成 [client] 或 [mysql] 段完全无效正确写法:[mysqld]default_authentication_plugin = mysql_native_password改完必须 sudo systemctl restart mysqld(不是 reload),否则不生效某些容器化部署(如 Docker 官方镜像)默认没挂载 my.cnf,得通过启动参数或 entrypoint 注入配置

客户端配置文件补救(仅限命令行工具)

对 MySQL 命令行客户端(mysql 命令)本身有效,不影响应用连接。适合运维临时调试,不能解决 Java/Python 应用报错。

在用户家目录加 ~/.my.cnf,内容为:[client]default_authentication_plugin = mysql_native_password该配置只作用于本地 mysql -u … 连接,不影响 JDBC URL、PHP mysqli_connect() 等文件权限必须是 600(chmod 600 ~/.my.cnf),否则客户端会忽略它

最容易被忽略的一点:很多团队试过改 my.cnf 却发现没用,其实是没注意到配置段写错了位置,或者以为改了就能让老用户自动切换——其实不会。真正要修通连接,ALTER USER + FLUSH PRIVILEGES 是唯一全环境兼容的操作。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。