MySQL 8.4+ 连接旧客户端工具:认证协议错误完整解决方案
问题背景
使用旧版数据库可视化管理工具(如 Navicat 旧版、MySQL Workbench 旧版等)连接 MySQL 8.4+ 时,常遇到以下错误:
1251 - Client does not support authentication protocol requested by server
或执行修改命令时出现:
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
错误原因
MySQL 8.0+ 默认使用 caching_sha2_password 认证插件,而旧客户端仅支持 mysql_native_password,导致连接失败。
完整解决方案-以修改root认证为例
步骤 1:检查当前用户和认证方式
-- 查看 root 用户的认证插件
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
通常结果如下:
+------+-----------+-----------------------+
| user | host | plugin |
+------+-----------+-----------------------+
| root | localhost | caching_sha2_password |
+------+-----------+-----------------------+
步骤 2:检查 mysql_native_password 插件是否可用
-- 检查插件状态
SELECT * FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME = 'mysql_native_password';
如果查询结果为空或 PLUGIN_STATUS 不是 ACTIVE,需要先启用插件。
插件有效一般结果是这样的
mysql> SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'mysql_native_password';
+-----------------------+----------------+---------------+----------------+---------------------+----------------+------------------------+--------------------+-----------------------------+----------------+-------------+
| PLUGIN_NAME | PLUGIN_VERSION | PLUGIN_STATUS | PLUGIN_TYPE | PLUGIN_TYPE_VERSION | PLUGIN_LIBRARY | PLUGIN_LIBRARY_VERSION | PLUGIN_AUTHOR | PLUGIN_DESCRIPTION | PLUGIN_LICENSE | LOAD_OPTION |
+-----------------------+----------------+---------------+----------------+---------------------+----------------+------------------------+--------------------+-----------------------------+----------------+-------------+
| mysql_native_password | 1.1 | ACTIVE | AUTHENTICATION | 2.1 | NULL | NULL | Oracle Corporation | Native MySQL authentication | GPL | ON |
+-----------------------+----------------+---------------+----------------+---------------------+----------------+------------------------+--------------------+-----------------------------+----------------+-------------+
1 row in set (0.00 sec)
步骤 3:启用 mysql_native_password 插件(如需要)
编辑 MySQL 配置文件(Windows: my.ini,Linux: my.cnf),在 [mysqld] 部分添加:
[mysqld]
default-authentication-plugin=mysql_native_password
然后重启 MySQL 服务
步骤 4:修改用户认证方式
确认插件可用后,执行以下命令:
-- 修改 root 用户认证方式(替换 'your_password' 为你的实际密码)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
-- 刷新权限
FLUSH PRIVILEGES;
-- 验证修改是否成功
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
现在应该看到 plugin 列显示为 mysql_native_password。