淺析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指令碼工作機制淺析的內容介紹完了,希望通過本文的學習能對你有所幫助
相關文章
- Timer機制原始碼淺析原始碼
- MySQL多版本併發控制機制(MVCC)-原始碼淺析MySqlMVC原始碼
- MVVM機制淺析MVVM
- Libco Hook 機制淺析Hook
- PostgreSQL MVCC快照機制淺析SQLMVC
- 淺析Vue 中 $nextTick 機制Vue
- js執行機制淺析JS
- 淺析雙親委派機制
- NX實現機制淺析
- [玩轉MySQL之二]MySQL連線機制淺析及運維MySql運維
- Webpack 模組打包機制淺析Web
- 微前端無界機制淺析前端
- 淺析注意力(Attention)機制
- Linux系統呼叫機制淺析Linux
- Redis - Lua 指令碼Redis指令碼
- JS指令碼非同步載入淺析JS指令碼非同步
- lua~IDEA中除錯lua指令碼Idea除錯指令碼
- 淺析JavaScript的事件迴圈機制JavaScript事件
- 淺析java記憶體管理機制Java記憶體
- JavaScript的事件迴圈機制淺析JavaScript事件
- Redis使用Lua指令碼Redis指令碼
- 淺析Dubbo的SPI擴充套件機制套件
- 淺析 PHP7 的垃圾回收機制PHP
- webrtc QOS筆記四 Nack機制淺析Web筆記
- IO多路複用與epoll機制淺析
- 使用CoordinatorLayout過程中遇到的兩個問題以及淺析CoordinatorLayout工作機制
- MySql(一) 淺析MySql索引MySql索引
- LUA指令碼虛擬機器逃逸技術分析指令碼虛擬機
- 簡單案例淺析JS執行緒機制JS執行緒
- Redis Lua指令碼完全入門Redis指令碼
- redis初級之Lua指令碼Redis指令碼
- wrk(2)- Lua 指令碼的使用指令碼
- nginx listen指令淺析之add listenNginx
- 【MySQL】八、double write 淺析.MySql
- MySQL事務原理淺析MySql
- 淺析MySQL replace into 的用法MySql
- 淺析Windows的訪問許可權檢查機制Windows訪問許可權
- 深入淺出Lua虛擬機器虛擬機
- shell指令碼中main函式中$#獲取不到指令碼傳入引數個數淺析指令碼AI函式