# 下載預編譯包 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 ;;
esac
| 參數 | 作用 |
|---|---|
--daemon | 守護進程模式運行 |
--admin-address=:4401 | 管理介面端口(本機 4401) |
--proxy-address=:3307 | 應用連接的代理端口 |
--proxy-backend-addresses=:3306 | 主庫(寫)地址 |
--proxy-read-only-backend-addresses=... | 從庫(讀)地址,可多個 |
--proxy-lua-script=... | 指定 rw-splitting.lua 實現讀寫分離 |
完整參數請執行 mysql-proxy --help-all 查看。
# 連接代理 mysql -h127.0.0.1 -uroot -P3307 mysql> SHOW PROCESSLIST; # 可見新連接建立
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 架構下頻繁建連導致「Too many connections」問題。
修改 rw-splitting.lua 兩個關鍵參數:
min_idle_connections = 1 max_idle_connections = 3
根據業務並發適當調大,可顯著降低後端連接壓力。