中间件使用中MySQL配置导致的bad handshake报错

背景

DBA同学反馈在给某个数据库代理中间件升级后,后端出现Bad handshake的错误,无法连接后端MySQL导致不能正常启动。而使用旧版本就可以直接连接,不会出现问题。

分析

根据跟踪,这个报错应该是代理向MySQL发送登录请求后返回的,对比正常版本的记录和目前最新的主分支,没有发现特别明显的差异。于是,怀疑可能是某些配置的问题。首先猜测可能是登录协议不支持,比如错误配置了ssl,或者不支持auth41等,这些都与capability有关。
再次经过对代码的对比,看到最新版本的默认capability多了个client_plugin_auth,如下图:
server.go:57


image.png

于是怀疑可能是这个差异造成。
为了验证猜想,给旧版也加了Client_plugin_auth,但是启动后没有发现问题。再想到capability可以在配置文件覆盖,找到目前的capablity:1024653,配置这个值后,本地复现了出现的问题:bad handshake,如下:

image.png

再把capability设置为当前默认值 500357,报错消失,可以正常启动。

capability表示客户端或者服务端支持或开启的各个功能,在建立连接的时候进行协调,如下图:


image.png

结论

原因是新版本代理的capability添加支持了CLIENT_PLUGIN_AUTH,会出现部分的不兼容。如果capability配置不对,会造成到MySQL建立连接失败,返回ERROR 1043 (08S01): Bad handshake的异常。解决方式是在配置文件修改capability的值,或者注释掉这个配置从而使用新版本的默认值500357。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容