Python

记一次 MySQL 8.0 与 caching_sha2_pas

2020-03-30  本文已影响0人  章光辉_数据

某天发现无法用客户端远程登录 MySQL 了,客户端提示:

Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image not found

同时,用 python 脚本连接客户端也出现了报错:

RuntimeError: cryptography is required for sha256_password or caching_sha2_password

查看官方文档,找到了原因:

总结下来,结论就是:问题出在客户端或者连接器上,谁让你们的实现方式没有适配最新的 MySQL 8.0(怪我咯?)

所以,要么客户端或连接器改,要么服务端改。

改客户端或连接器的连接方式

我是在 Python 环境下遇到的问题,两步解决:

  1. 修改 Python 连接 MySQL 的驱动为 pymysql。
pip install PyMySQL

然后,数据库连接字符串改成

mysql+pymysql://username:password@server/db
  1. 安装 cryptography 模块。

这一步骤是以防万一,有网友反馈使用了 pymysql 模块可能还是会出现报错 cryptography is required for sha256_password or caching_sha2_password,其实只要再安装 cryptography 模块就可以了。

pip install cryptography

也期待有小伙伴分享其他解决方案。

改服务端的身份验证插件

现在要考虑两个问题:

重置身份验证插件

登录 MySQL 所在主机,用有权限的账号,以本地登录的方式进入 MySQL。

对受到影响的账号,修改身份认证方式。

ALTER USER '用户名'@'HOST' IDENTIFIED WITH mysql_native_password BY '旧密码';

如果不想每次遇到问题了再修改,索性就把所有可能会遇到问题的账号都改了:

首先,查看目前有哪些账号的身份验证插件用了 caching_sha2_password:

select user, host 
from mysql.user 
where plugin = 'caching_sha2_password';

然后对上述结果,执行一遍 alter 语句。

修改数据库配置

修改数据库的配置文件 my.cnf,指定默认的身份验证插件为旧插件。

[mysqld]
default_authentication_plugin=mysql_native_password
上一篇 下一篇

猜你喜欢

热点阅读