MySQL Proxy 的核心價值在於透明實現「讀寫分離」:主庫處理事務寫入,從庫分攤 SELECT 查詢,通過復制同步數據。本文基於 0.6.0 版本,詳述從源碼編譯到生產級啟動腳本的完整落地流程,並給出 rw-splitting.lua 關鍵參數調優建議。
dpa.nsysu.edu.tw/Downloads/MySQL-Proxy/ 下載mysql-proxy-0.6.0.tar.gzSTOP SLAVE 驗證流向)# 解壓預編譯包 tar zxf mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz cd mysql-proxy-0.6.0-linux-rhas4-x86 # 安裝二進制與 Lua 腳本 mv sbin/mysql-proxy /usr/local/sbin/ mv share/mysql-proxy /usr/local/share/ strip /usr/local/sbin/mysql-proxy # 裁剪符號表減小體積
/etc/init.d/mysql-proxy#!/bin/sh
export LUA_PATH=/usr/local/share/mysql-proxy/?.lua
mode=${1:-start}
case $mode in
start)
mysql-proxy --daemon \
--admin-address=:4401 \
--proxy-address=:3307 \
--proxy-backend-addresses=:3306 \
--proxy-read-only-backend-addresses=192.168.133.232:3306 \
--proxy-read-only-backend-addresses=10.10.74.61:3306 \
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua
;;
stop) killall mysql-proxy ;;
restart) $0 stop && $0 start || exit 1 ;;
esac
exit 0
| 參數 | 含義 |
|---|---|
--daemon | 守護進程模式運行 |
--admin-address=:4401 | 管理接口端口,支援運行時查看統計、修改後端權重 |
--proxy-address=:3307 | 應用端連接入口,應用改連 3307 即可透明接入 |
--proxy-backend-addresses=:3306 | 主庫地址,所有寫請求路由至此 |
--proxy-read-only-backend-addresses | 從庫地址,可多次指定,SELECT 請求負載均衡分發 |
--proxy-lua-script | 讀寫分離邏輯腳本,內建 rw-splitting.lua |
完整參數請執行 mysql-proxy --help-all 查看。
# 連接 Proxy 驗證路由 mysql -h127.0.0.1 -uroot -P3307 -e "show processlist;" # sysbench OLTP 壓測 sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 \ --mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-db=test prepare sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 \ --mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-db=test run
測試輸出顯示 Threads fairness: events (avg/stddev): 10000.0000/0.00,穩定跑完全量,未出現崩潰。
MySQL Proxy 同時具備連接池能力,解決 LAMP 架構下 PHP 短連接頻繁握手痛點。若使用 rw-splitting.lua,建議調整默認空閒連接數:
min_idle_connections = 1 max_idle_connections = 3
根據業務 QPS 與從庫數量進一步調大,避免頻繁建連抖動。
MySQL Proxy 0.6.x 雖屬早期版本,但「Proxy + Lua 腳本」的可編程架構奠定了後續 MyCat、ProxySQL、Kingshard 等中間件的設計範式。生產環境建議遷移至活躍維護的 ProxySQL(支援多線程、GTID、查詢重寫、熔斷降級),本文流程可作為原理學習與遷移參考。