中間件使用中MySQL配置導(dǎo)致的bad handshake報(bào)錯(cuò)

背景

DBA同學(xué)反饋在給某個(gè)數(shù)據(jù)庫(kù)代理中間件升級(jí)后,后端出現(xiàn)Bad handshake的錯(cuò)誤,無(wú)法連接后端MySQL導(dǎo)致不能正常啟動(dòng)。而使用舊版本就可以直接連接,不會(huì)出現(xiàn)問(wèn)題。

分析

根據(jù)跟蹤,這個(gè)報(bào)錯(cuò)應(yīng)該是代理向MySQL發(fā)送登錄請(qǐng)求后返回的,對(duì)比正常版本的記錄和目前最新的主分支,沒(méi)有發(fā)現(xiàn)特別明顯的差異。于是,懷疑可能是某些配置的問(wèn)題。首先猜測(cè)可能是登錄協(xié)議不支持,比如錯(cuò)誤配置了ssl,或者不支持auth41等,這些都與capability有關(guān)。
再次經(jīng)過(guò)對(duì)代碼的對(duì)比,看到最新版本的默認(rèn)capability多了個(gè)client_plugin_auth,如下圖:
server.go:57


image.png

于是懷疑可能是這個(gè)差異造成。
為了驗(yàn)證猜想,給舊版也加了Client_plugin_auth,但是啟動(dòng)后沒(méi)有發(fā)現(xiàn)問(wèn)題。再想到capability可以在配置文件覆蓋,找到目前的capablity:1024653,配置這個(gè)值后,本地復(fù)現(xiàn)了出現(xiàn)的問(wèn)題:bad handshake,如下:

image.png

再把capability設(shè)置為當(dāng)前默認(rèn)值 500357,報(bào)錯(cuò)消失,可以正常啟動(dòng)。

capability表示客戶端或者服務(wù)端支持或開啟的各個(gè)功能,在建立連接的時(shí)候進(jìn)行協(xié)調(diào),如下圖:


image.png

結(jié)論

原因是新版本代理的capability添加支持了CLIENT_PLUGIN_AUTH,會(huì)出現(xiàn)部分的不兼容。如果capability配置不對(duì),會(huì)造成到MySQL建立連接失敗,返回ERROR 1043 (08S01): Bad handshake的異常。解決方式是在配置文件修改capability的值,或者注釋掉這個(gè)配置從而使用新版本的默認(rèn)值500357。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容