MySQL 8.0默认使用caching_sha2_password插件,因要求客户端支持RSA或TLS,而Navicat 12等旧工具不兼容,导致认证阶段报错2059;须用ALTER USER精确匹配host并指定密码切换插件,再执行FLUSH PRIVILEGES生效。

MySQL 8.0 安装后默认用 caching_sha2_password,不改就直接导致 Navicat、旧版 PHP/Python 驱动、Docker 内客户端等连不上——这不是密码错,是协议不认。
为什么新装 MySQL 8.0 连接报错“Client does not support authentication protocol requested by server”
MySQL 8.0.4 起,默认身份验证插件从 mysql_native_password 换成了 caching_sha2_password。这个插件更安全(支持 SHA-256、可缓存凭据),但要求客户端也支持 RSA 密钥交换或启用 SSL;而 Navicat 12 及更早、PHP MySQLi 扩展(mysqlnd 未更新)、某些 Python mysql-connector 版本,压根不加载该插件,连接时直接中断。
常见错误信息包括:
Authentication plugin 'caching_sha2_password' cannot be loaded-
Error No. 2059(Navicat) -
Authentication requires secure connection(主从复制场景)
ALTER USER 切换单个用户插件(最常用、最安全)
只改你实际要用的账号(比如 root 或应用用户),不影响其他用户,也不动全局配置。
- 必须用
ALTER USER ... IDENTIFIED WITH mysql_native_password BY 'password',不能只写IDENTIFIED WITH省略BY——否则原密码被清空,账号锁死 - host 必须完全匹配:如果你用
127.0.0.1连,就得改'root'@'127.0.0.1',不是'root'@'localhost';远程连接要单独改'user'@'%'或具体 IP - 执行完必须运行
FLUSH PRIVILEGES(MySQL 8.0.16+ 多数自动刷新,但显式执行更稳) - 如果提示
ERROR 1396 (HY000),说明用户不存在,先用CREATE USER创建再改
示例(改本地 root):
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_secure_password'; FLUSH PRIVILEGES;
修改 my.cnf 让新建用户默认用 mysql_native_password(仅限开发/测试环境)
加了这行,后续 CREATE USER 的账号才会默认走 mysql_native_password;已有用户**不受影响**,仍需手动 ALTER USER。
- 编辑配置文件(如
/etc/mysql/my.cnf或/usr/my.cnf),在[mysqld]段落下添加:
default_authentication_plugin=mysql_native_password
- Linux 下重启服务:
sudo systemctl restart mysql - macOS Homebrew:
brew services restart mysql - 云数据库(如阿里云 RDS、AWS RDS)通常禁止修改此配置,只能走
ALTER USER方式
命令行或客户端配置临时绕过(适合调试或 CI 环境)
不改服务端,只让客户端主动声明用老插件,适合 Docker 启动容器、CI 脚本或本地开发快速验证。
- 命令行连接时加参数:
mysql -u user -p --default-auth=mysql_native_password - 或在
~/.my.cnf的[client]段落加:
[client] default_authentication_plugin = mysql_native_password
注意:~/.my.cnf 文件权限必须是 600(chmod 600 ~/.my.cnf),否则 MySQL 客户端会忽略它。
容易被忽略的一点:MySQL 8.0.34 起 mysql_native_password 已被标记为 deprecated,8.4 默认禁用,9.0 将彻底移除——所以生产环境长期方案应是升级客户端驱动并启用 SSL,而不是依赖这个降级配置。










