pymysql 连接 mysqlrouter caching sha2 报错处理

🥘 阅读完本文需要五分钟

🎳 MySQL知识补充

在MySQL的实际生产中,用户的密码认证插件主要使用下面两种:

  • ❇️ mysql_native_password
  • ❇️ caching_sha2_password

🎳 问题简述

在使用 pymysql 连接 MySQL 时可以正常访问(用户密码认证策略是caching_sha2_password

但是通过连接 mysqlrouter 访问数据库示例时,报错如下:

{"IsSuccess":false,"ErrorMessage":"caching sha2: Unknown packet for public key: b'-'"}

🎳 解决方法一

此时你会怎么处理了,可能会把用户的密码认证策略改为 caching_sha2_password,但是虽然可以临时解决,但是不建议,原因后面会说明。

ALTER USER user1 identified with mysql_native_password by 'pass';

🎳 解决方法二

由于是pymysql的 bug 导致,所以可以在创建连接时增加ssl 参数即可,至于verify_mode 的值无所谓,便于直观可以写为DISABLED

conn = pymysql.connect(  
    host='172.16.171.172',  
    port=8446,  
    user='u001',  
    password='123456Aa#',  
    db='information_schema',  
    ssl={'verify_mode''DISABLED'}  
)

🎳 题外话

我们接着之前的话题,很多驱动在早期不支持 caching_sha2_password,所以很多生产中都会选择mysql_native_password作为默认认证插件,那为什么我们不建议修改为mysql_native_password呢?

主要有以下原因:

⚒️ caching_sha2_password 安全性更高;  ⚒️ caching_sha2_password 性能高;  ⚒️ MySQL在逐步废弃 mysql_native_password,在MySQL 8.0.34 中已经开始出现废弃提示了。所以为了避免后期升级改密码策略等问题,建议提前采用caching_sha2_password

✏️ 本篇完,下次再见~


原文始发于微信公众号(小新数据库):pymysql 连接 mysqlrouter caching sha2 报错处理

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/207593.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!