淺析Lua腳本:MySQL Proxy工作機制
MySQL Proxy處于客戶端應(yīng)用程序和MySQL服務(wù)器之間,通過截斷、改變并轉(zhuǎn)發(fā)客戶端和后端數(shù)據(jù)庫之間的通信來實現(xiàn)其功能,這和WinGate之類的網(wǎng)絡(luò)代理服務(wù)器的基本思想是一樣的。代理服務(wù)器是和TCP/IP協(xié)議打交道,而要理解MySQL Proxy的工作機制,同樣要清楚MySQL客戶端和服務(wù)器之間的通信協(xié)議,MySQL Protocol包括認證和查詢兩個基本過程:
認證過程包括:
客戶端向服務(wù)器發(fā)起連接請求
服務(wù)器向客戶端發(fā)送握手信息
客戶端向服務(wù)器發(fā)送認證請求
服務(wù)器向客戶端發(fā)送認證結(jié)果
如果認證通過,則進入查詢過程:
客戶端向服務(wù)器發(fā)起查詢請求
服務(wù)器向客戶端返回查詢結(jié)果
當(dāng)然,這只是一個粗略的描述,每個過程中發(fā)送的包都是有固定格式的,想詳細了解MySQL Protocol的同學(xué),可以去這里看看。MySQL Proxy要做的,就是介入?yún)f(xié)議的各個過程。首先MySQL Proxy以服務(wù)器的身份接受客戶端請求,根據(jù)配置對這些請求進行分析處理,然后以客戶端的身份轉(zhuǎn)發(fā)給相應(yīng)的后端數(shù)據(jù)庫服務(wù)器,再接受服務(wù)器的信息,返回給客戶端。所以MySQL Proxy需要同時實現(xiàn)客戶端和服務(wù)器的協(xié)議。
由于要對客戶端發(fā)送過來的SQL語句進行分析,還需要包含一個SQL解析器??梢哉fMySQL Proxy相當(dāng)于一個輕量級的MySQL了,實際上,MySQL Proxy的admin server是可以接受SQL來查詢狀態(tài)信息的。
MySQL Proxy通過lua腳本來控制連接轉(zhuǎn)發(fā)的機制。主要的函數(shù)都是配合MySQL Protocol各個過程的,這一點從函數(shù)名上就能看出來:
- connect_server()
- read_handshake()
- read_auth()
- read_auth_result()
- read_query()
- read_query_result()
至于為什么采用lua腳本語言,我想這是因為MySQL Proxy中采用了wormhole存儲引擎的關(guān)系吧,這個蟲洞存儲引擎很有意思,數(shù)據(jù)的存儲格式就是一段lua腳本,真是創(chuàng)意無限啊。
小結(jié):MySQL Proxy Lua腳本工作機制淺析的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助