这个错误 “1251 - Client does not support authentication protocol requested by server” 通常发生在较新的 MySQL 服务器(如 MySQL 8.0+)与旧版客户端工具(如 MySQL Workbench、Navicat 或某些程序)连接时,原因是 MySQL 8.0 默认使用了更安全的 caching_sha2_password
认证插件,而旧客户端可能只支持旧的 mysql_native_password
插件。
解决方案
方法 1:修改用户认证插件(推荐)
-
使用 MySQL 命令行登录(确保你有管理员权限):
mysql -u root -p
-
查看当前用户的认证插件:
SELECT user, host, plugin FROM mysql.user;
如果
plugin
列显示caching_sha2_password
,则需要修改。 -
将用户认证方式改为
mysql_native_password
:ALTER USER '你的用户名'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
例如:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
-
刷新权限:
FLUSH PRIVILEGES;
-
重新连接客户端,问题应该解决。
方法 2:升级客户端工具
如果不想修改服务器配置,可以升级客户端工具(如 MySQL Workbench、Navicat 或程序依赖的 MySQL 连接库)到最新版本,以支持 caching_sha2_password
。
方法 3:修改 MySQL 服务器配置(不推荐)
如果无法升级客户端,可以临时修改 MySQL 默认认证插件(需编辑配置文件):
-
找到 MySQL 配置文件
my.ini
(Windows)或my.cnf
(Linux),通常位于:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
(Windows)/etc/mysql/my.cnf
(Linux)
-
在
[mysqld]
部分添加:default_authentication_plugin=mysql_native_password
-
重启 MySQL 服务:
net stop MySQL80 net start MySQL80
总结
方案 | 操作 | 适用场景 |
---|---|---|
修改用户认证插件 | ALTER USER ... IDENTIFIED WITH mysql_native_password | 兼容旧客户端 |
升级客户端工具 | 安装最新版 MySQL Workbench/Navicat/JDBC 驱动 | 保持安全性 |
修改服务器配置 | 编辑 my.ini 并重启 MySQL | 临时解决方案 |
建议优先选择方法 1,因为它兼具安全性与灵活性。如果问题依然存在,请确认以下几点:
- 客户端与服务器的版本是否一致。 - 防火墙是否阻止了 MySQL 默认端口(3306)。