Web 應用(Linux+Apache+PHP+MySQL)流量暴增,單一 MySQL 負載過高導致回應緩慢、鎖表頻繁、Load Average 飆升。傳統「修改程式碼分離讀寫」工程浩大且易出錯。需要一個透明的中介層,自動依 SQL 類型(讀/寫)路由至主/從庫,並具備健康檢查、負載均衡、高可用(HA)能力。
| 位移 | 欄位 | 長度 | 說明 |
|---|---|---|---|
| 0-2 | Data Length | 3 | 封包體長度(小端序) |
| 3 | Sequence ID | 1 | 遞增序號 |
| 4 | Flag | 1 | 0=普通、1=多段、2=認證回應、>2=段結束 |
| 5 | CMD Code | 1 | 命令碼 |
| 6- | Message | Len-1 | 承載資料 |
| Code | 類型 | Message 結構 |
|---|---|---|
| 0x00 | 狀態碼 | 影響行數(2) + ... |
| 0x0A | 握手/版本 | 版本字串(8) + Session ID(4) + Unknown(11) + 挑戰碼(8) |
| 0xFF | 錯誤 | ErrCode(2) + ErrMsg |
| 0xFE | 多段結束 | 空 |
| 位移 | 欄位 | 長度 |
|---|---|---|
| 0-2 | Data Length | 3 |
| 3 | Sequence ID | 1 |
| 4 | Compressed | 1 |
| 5 | Command ID | 1 |
| 6- | Command Data | Len-1 |
0x01 COM_QUIT
0x03 COM_QUERY -- 普通查詢(核心路由點)
0x0B COM_PROCESS_INFO
0x10 COM_PROCESS_KILL
0x17 COM_CHANGE_USER
挑戰:Server 握手時送出 8-byte 挑戰碼,Client 用其加密密碼回傳。作者未破解加密演算法,採「跳過密碼」策略:

COM_QUERY 封包中的 SQL 文本。SELECT、SHOW、EXPLAIN → 輪詢/負載導向從庫。INSERT/UPDATE/DELETE/REPLACE/CREATE/ALTER/DROP → 強制導向主庫。BEGIN/COMMIT/ROLLBACK)整段黏著主庫。LoadAvg 回報 Proxy,依負載加權路由(版本 0.0.4 仍採輪詢,負載感知在開發中)。sql-bench(單點效能基準)。ab 壓測。徐超,TOM.COM 北京,網路系統技術支援。業餘開發 NetSocket 基礎應用:SocketChat、MySQL-HA-Proxy、PHP Session Server。