最近碰到了一個奇怪的權(quán)限問題,問題的背景是業(yè)務(wù)同學(xué)反饋在下班后,有一個數(shù)據(jù)表出現(xiàn)了阻塞,導(dǎo)致后續(xù)的業(yè)務(wù)流程都產(chǎn)生了擁堵,在對這個問題進行分析發(fā)現(xiàn),業(yè)務(wù)同學(xué)所謂的擁堵,阻塞是數(shù)據(jù)庫連接出了問題。當(dāng)然我們進行了一些深入的溝通,對整個問題的情況有了一個更為清晰的了解。
6:30左右,業(yè)務(wù)同學(xué)發(fā)現(xiàn)程序端產(chǎn)生了阻塞,程序端正在處理的操作是一個create table的操作。
6:40左右,業(yè)務(wù)同學(xué)嘗試通過客戶端工具連接到數(shù)據(jù)庫來手工執(zhí)行,但是發(fā)現(xiàn)連接超時,根據(jù)業(yè)務(wù)同學(xué)反饋,之前是能夠正常連接的。
6:50左右,業(yè)務(wù)同學(xué)開始呼叫DBA進行處理。
7:00左右,DBA就位后,什么都沒做,就魔法般的解決了問題。
對于業(yè)務(wù)同學(xué)的印象,是數(shù)據(jù)庫不夠穩(wěn)定,因為另外一套環(huán)境也出現(xiàn)了類似的問題,這是一個很糾結(jié)的情況,我們?nèi)缤呃睞夢般的存在,但是實際上什么都沒有做就解決了問題。
當(dāng)然在我的職業(yè)生涯中,對待問題我是不相信神奇的力量,事出有因,我希望找到那些看起來簡單的問題的答案。
從業(yè)務(wù)同學(xué)的反饋時間點開始,我嘗試找到一些相關(guān)的日志來看看,從數(shù)據(jù)庫的處理來看,是不大可能阻塞DDL中的create操作的,無論服務(wù)器壓力大小,這算是DDL里面最正常的需求了,絕對不應(yīng)該阻塞幾十分鐘。
幸運的是,我很快找到了相關(guān)的binlog日志,簡單解析之后,看到了下面的內(nèi)容。
從內(nèi)容來看,情況和業(yè)務(wù)同學(xué)反饋的時間點是吻合的,業(yè)務(wù)邏輯會自動創(chuàng)建相關(guān)的時間表,而下一次create則是在20多分鐘之后,這里的問題就來了,為什么創(chuàng)建兩張表的過程中會有這些權(quán)限處理的語句出現(xiàn)?
看這些權(quán)限處理的語句還是比較規(guī)范的,而且從執(zhí)行日志來看不大像是人工執(zhí)行的,因為整個權(quán)限的處理涉及的語句條數(shù)還比較多,從執(zhí)行上來看,像是工具生成的。
我查看了下相關(guān)時間范圍內(nèi)的工單數(shù)據(jù),發(fā)現(xiàn)在那個指定的時間段里,確實有同事在處理幾個相關(guān)的工單,帶著這個信息和同事確認,才發(fā)現(xiàn)這兩件看起來不相關(guān)的事情還是有關(guān)聯(lián)的。
業(yè)務(wù)同學(xué)反饋,有兩套環(huán)境都出現(xiàn)了類似的問題,和工單數(shù)據(jù)比對發(fā)現(xiàn),情況是完全相符的,在出現(xiàn)問題的時間段里產(chǎn)生了阻塞。
我們來仔細看一下這條語句:
GRANT USAGE ON *.* TO 'srv_datasync_rwh'@'192.168.18.%' IDENTIFIED WITH 'MySQL_native_password' AS '*5EEBC522DE487B0D5C2506C65412F9C337F70C40'
這條語句是對于192.168.18端的客戶端開通相應(yīng)的權(quán)限,而這個grant語句其實是類似MySQL 5.7的create user語句,帶著這個問題繼續(xù)下鉆,發(fā)現(xiàn)原來這個數(shù)據(jù)庫中本身是存在用戶'srv_datasync_rwh'@'192.168.18.%' 的,在這里,相當(dāng)于工具重新生成了完整的授權(quán)語句,對已經(jīng)存在的用戶進行了重新授權(quán),這個操作的代價有點類似于權(quán)限重置。
而這個問題在測試環(huán)境中模擬是直接復(fù)現(xiàn)不了的,整個問題和觸發(fā)的上下文環(huán)境也有相關(guān)性,同時對涉及到權(quán)限處理的完整過程中產(chǎn)生了額外影響,有點類似于在購物網(wǎng)站中,一邊在購物下單,另一邊在同時做密碼重置,這是一種較為模糊的臨界狀態(tài)。
總體來說,這個權(quán)限問題還是相對可控的,我們需要修復(fù)運維工具自動生成的語句的邏輯,對于5.7版本的使用create user,grant這種組合授權(quán)模式。
個人新書 《MySQL DBA工作筆記》