淺析Lua腳本:MySQL Proxy工作機制

MySQL Proxy處於客戶端應用程序和MySQL服務器之間,通過截斷、改變並轉發客戶端和後端數據庫之間的通信來實現其功能,這和WinGate之類的網絡代理服務器的基本思想是一樣的。代理服務器是和TCP/IP協議打交道,而要理解MySQL Proxy的工作機制,同樣要清楚MySQL客戶端和服務器之間的通信協議,MySQL Protocol包括認證和查詢兩個基本過程:

  認證過程包括:

  客戶端向服務器發起連接請求

  服務器向客戶端發送握手信息

  客戶端向服務器發送認證請求

  服務器向客戶端發送認證結果

  如果認證通過,則進入查詢過程:

  客戶端向服務器發起查詢請求

  服務器向客戶端返回查詢結果

  當然,這只是一個粗略的描述,每個過程中發送的包都是有固定格式的,想詳細瞭解MySQL Protocol的同學,可以去這裏看看。MySQL Proxy要做的,就是介入協議的各個過程。首先MySQL Proxy以服務器的身份接受客戶端請求,根據配置對這些請求進行分析處理,然後以客戶端的身份轉發給相應的後端數據庫服務器,再接受服務器的信息,返回給客戶端。所以MySQL Proxy需要同時實現客戶端和服務器的協議。

  由於要對客戶端發送過來的SQL語句進行分析,還需要包含一個SQL解析器。可以說MySQL Proxy相當於一個輕量級的MySQL了,實際上,MySQL Proxy的admin server是可以接受SQL來查詢狀態信息的。

  MySQL Proxy通過lua腳本來控制連接轉發的機制。主要的函數都是配合MySQL Protocol各個過程的,這一點從函數名上就能看出來:

  connect_server()   
  read_handshake()   
  read_auth()   
  read_auth_result()   
  read_query()   
  read_query_result()  

  至於爲什麼採用lua腳本語言,我想這是因爲MySQL Proxy中採用了wormhole存儲引擎的關係吧,這個蟲洞存儲引擎很有意思,數據的存儲格式就是一段lua腳本,真是創意無限啊。

  小結:MySQL Proxy Lua腳本工作機制淺析的內容介紹完了,希望通過本文的學習能對你有所幫助

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章