1. 报错信息
使用某工具连接 MySQL 服务器时,报错:
1 | Unable to load authentication plugin 'caching_sha2_password'. |
此报错信息翻译过来是说,无法加载身份验证插件 caching_sha2_password
。
2. 错误分析
此错误的根本原因是:
MySQL 在 8 版本后使用了新的身份验证插件 caching_sha2_password
,
而在 8 以前的身份验证插件是 mysql_native_password
。
我这里的 MySQL 版本为 8.0.28,我们可以查看下当前的默认身份验证插件的确是 caching_sha2_password
:
1 | mysql> show variables like "default_authentication_plugin"; |
此错误的直接原因是:
我们拿着 8 以前版本的 MySQL 客户端(或者使用 8 以前版本 MySQL 连接器的某工具)来连接 8 以后版本的 MySQL 服务器,我们自然拿不出 MySQL 服务器所需要的身份验证插件 caching_sha2_password
。
3. 解决方案
我们已经知道了问题出在哪里,那么解决起来就比较容易了,有三个方案:
- (推荐)升级我们的 MySQL 客户端版本(或某工具使用的 MySQL 驱动器)到 8 以后,以使用新版验证插件
caching_sha2_password
。 - (不推荐)将 MySQL 服务器全局的默认验证插件更改为旧的
mysql_native_password
。 - (不推荐)将 MySQL 服务器针对指定户登录时的验证插件更改为旧的
mysql_native_password
。
-
方案 1(推荐):升级 MySQL 客户端版本(或某工具使用的 MySQL 连接器)到 8 以后
注意哦,这里升级的是 MySQL 客户端的版本(因为此错误是由于 MySQL 客户端拿不出 MySQL 服务器指定的身份验证插件导致的),不涉及 MySQL 服务器升级时的复杂操作(比如可能需要考虑的数据备份等)。升级 MySQL 客户端的方法多种多样,网上一搜一大把,这里就不说了。
如果你用的是使用 MySQL 连接器的某工具,则可以查看其内是否已有 8 以后版本的连接器可选,如果有则直接设置。如果没有,可自行在 MySQL Community Downloads下载所需连接器,记得选 8 以上版本的就行。
-
方案 2(不推荐):修改 MySQL 服务器全局的默认验证插件
此方案应当仅用于测试环境,不建议用于生产环境。
此方案的修改生效后,仅对新创建的用户生效,原有用户仍需要手动修改(方案 3)。
编辑 MySQL 服务器配置文件 /etc/my.cnf
:
1 | vim /etc/my.cnf |
在其中的 [mysqld]
部分下添加以下内容:
1 | [mysqld] |
完成后,使用 systemctl restart mysqld
命令(或其他你使用的 MySQL 管理方式)重启 MySQL 服务器即可。
我们可以检查一下变量 default_authentication_plugin
的值以确定修改成功:
1 | mysql> show variables like "default_authentication_plugin"; |
-
方案 3(不推荐):修改 MySQL 服务器中指定户登录时的验证插件
此方案应当仅用于测试环境,不建议用于生产环境。
修改用户 'username'@'host'
的验证插件为 mysql_native_password
,密码为 passwd
。命令如下:
1 | ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'passwd'; |
此命令修改立即生效。