首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Proxy 部署與讀寫分離 Lua 腳本實戰教程

     編輯:MySQL 資料庫相關知識

MySQL Proxy 的核心價值在於透明實現「讀寫分離」:主庫處理事務寫入,從庫分攤 SELECT 查詢,通過復制同步數據。本文基於 0.6.0 版本,詳述從源碼編譯到生產級啟動腳本的完整落地流程,並給出 rw-splitting.lua 關鍵參數調優建議。

環境準備與依賴

  • Lua 解釋器:官網或 dpa.nsysu.edu.tw/Downloads/MySQL-Proxy/ 下載
  • MySQL Proxy 源碼包:mysql-proxy-0.6.0.tar.gz
  • 測試架構:主庫 + 2 從庫,已配置主從復制(測試前 STOP 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,穩定跑完全量,未出現崩潰。

進階:內建連接池與 Lua 參數調優

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、查詢重寫、熔斷降級),本文流程可作為原理學習與遷移參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved