MySQL密码问题
问题描述
MySQL8.0及以上的版本,认证方式发生了改变,虽然不影响我们使用Navicat等工具连接到数据库,但是如果本地有一些程序使用老版本的MySQL连接器(MySQL-connector)去与高版本的数据库创建连接时,大概率会爆出这么一条错误:
1 |
|
问题分析与解决
通过上面的报错其实我们已经能知道个大概了:在/usr/lib/mysql/plugin
目录下找不到caching_sha2_password.so
文件,导致无法建立从主机到服务器的连接
那么为什么没有这个文件就不能你建立连接呢?具体细节可以查看mysql8.0.4新插件caching_sha2_password
官网说明,概括来说就是因为:
MySQL8.0版本启用了新的认证方式,从native_password
变为了caching_sha2_password
,服务端将相关插件编译进了程序,而客户端编译进了libmysqlclient
,如果本地没有这个插件呢,那自然就无法使用此种验证方登陆了。
因此解决的方法有两种:
一种是直接指定用户的验证方式,切回老版:
- 通过命令行终端登录mysql(
mysql -uroot -p
),注意需先通过ssh或workbench登录到服务端机器上,否则会因不允许远程登录而无法连接 - 输入
ALTER USER user@localhost IDENTIFIED WITH mysql_native_password BY 'xxxxxx';
- 刷新数据库
FLUSH PRIVILEGES;
- 通过命令行终端登录mysql(
另一种彻底的,也是更安全的方式就是升级客户端,如果是其他插件升至最新版,如果是mysql-client升至8.0以上,这种方案在我们无法登录到服务端数据库的情况下是唯一解
关于认证方式升级的具体原理可以参考浅谈 MySQL 新的身份验证插件 caching_sha2_password
总结
解决新老版本MySQL之间无法登陆扥提有两种解决方式,一种是切回老版的sha1认证方式,适用于开发环境、可以接触到服务端数据库的情况,另一种是升级客户端,虽然麻烦但更加安全
MySQL密码问题
https://dockingyuan.top/2022/11/29/database/mysql-passwd/