mysql | 連接器

mysql 的連接器是msyql server層的第一個模塊。當(dāng)我們用mysql 客戶端來連接mysql服務(wù)器的時候,處理這個連接請求的就是連接器模塊。

mysql客戶端和服務(wù)器端的連接使用的是TCP協(xié)議,在完成TCP握手之后,連接器開始進(jìn)行身份認(rèn)證。

如果用戶名或密碼不對,那么連接器會拋出一個 "Access denied for user"的錯誤,客戶端結(jié)束執(zhí)行。

如果用戶名密碼認(rèn)證通過,那么連接器會到權(quán)限表中查出賬號擁有的權(quán)限。以后所有的權(quán)限判斷都是基于此時查出的權(quán)限。這意味著,一個用戶成功建立連接后,即使root用戶修改了這個用戶的權(quán)限,對之前的連接也不能生效。只有修改之后生成的連接才能獲取到新的權(quán)限。

連接建立成功后,如果長時間沒有操作,連接器會自動斷開連接。斷開連接的時間是由wait_timeout控制的,默認(rèn)值是8小時。

如果連接被斷開后,客戶端再次發(fā)生請求,會收到“Lost connection to MySQL server during query”的錯誤提示。這時候想要執(zhí)行查詢,就需要重連了。

使用show processlist 可以查看系統(tǒng)所有連接的信息。其中Command 列表示 連接的狀態(tài),“Sleep” 表示 連接是一個空間的連接,沒有進(jìn)行操作。

mysq的長連接是指連接成功后,客戶端有持續(xù)的請求,使用的一直是同一個連接。短連接是指每次執(zhí)行完少量的操作后就斷開連接,下次使用在重新建立連接。

因?yàn)檫B接過程比較復(fù)雜,所以推薦使用長連接。

但是使用長連接,會存在占用內(nèi)存大的問題。這是因?yàn)樵陂L連接中申請的臨時內(nèi)存會一直存在,只有當(dāng)連接斷開的時候才釋放。

解決長連接占用內(nèi)存大的問題有兩個方法 1)定期斷開長連接,清楚長連接占用的內(nèi)存。 2) mysql 5.7 或者更高的版本,可以執(zhí)行 mysql_reset_connection 來重新初始化連接。這個過程不需要重新建立連接,但是會釋放占用的臨時內(nèi)存,將連接恢復(fù)到剛剛創(chuàng)立連接的狀態(tài)。

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

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

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