MySQL Proxy 作為中間層代理,對客戶端透明化後端數據庫拓撲,支援讀寫分離、負載均衡、SQL 過濾改寫、熔斷降級等高階功能。本文以雙主機雙節點環境為例,詳細記錄安裝、配置、授權與驗證全流程。
| 角色 | IP | 部署組件 |
|---|---|---|
| Host A (Master) | 192.168.0.11 | MySQL Server (寫入節點) |
| Host B (Slave/Proxy) | 192.168.0.32 | MySQL Server (讀取節點) + MySQL Proxy |
Proxy 監聽 4040 端口,後端掛載兩個 3306 實例,客戶端連接 Proxy 即可實現透明路由。
# CentOS/RHEL
yum install mysql-proxy -y
# 或下載官方 RPM
wget https://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.5-linux-glibc2.12-x86-64bit.rpm
rpm -ivh mysql-proxy-*.rpm
/etc/init.d/mysql-proxyPROXY_PATH=/usr/sbin # 唯一需修改:mysql-proxy 二進制路徑
# 其餘照搬官方模板
chmod +x /etc/init.d/mysql-proxy
/etc/sysconfig/mysql-proxy# 必須保留 --daemon 守護模式
PROXY_OPTIONS="--proxy-backend-addresses=192.168.0.11:3306 \
--proxy-backend-addresses=192.168.0.32:3306 \
--daemon"
Proxy 以 root@192.168.0.32 身份連接兩個 MySQL 實例,需提前授權:
-- 在 192.168.0.11 (Master) 執行
GRANT ALL ON *.* TO 'root'@'192.168.0.32' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
-- 在 192.168.0.32 (Slave) 執行
GRANT ALL ON *.* TO 'root'@'192.168.0.32' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
# 啟動 Proxy
service mysql-proxy start
# 客戶端連接測試 (兩個終端並發)
mysql -h 192.168.0.32 -P 4040 -u root -p
# 觀察連接分發
netstat -anp | grep 3306
# 應見 Proxy 建立兩條後端連接:
# tcp 0 0 192.168.0.32:xxxxx 192.168.0.11:3306 ESTABLISHED /mysql-proxy
# tcp 0 0 192.168.0.32:xxxxx 192.168.0.32:3306 ESTABLISHED /mysql-proxy
MySQL Proxy 內嵌 Lua 引擎,可編寫 rw-splitting.lua 實現:
SELECT、SHOW 路由至 Slave (192.168.0.32)INSERT/UPDATE/DELETE、事務、SELECT ... FOR UPDATE 路由至 Master (192.168.0.11)# 啟動時指定腳本
PROXY_OPTIONS="--proxy-backend-addresses=192.168.0.11:3306 \
--proxy-backend-addresses=192.168.0.32:3306 \
--proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua \
--daemon"
proxy_connections_accepted、proxy_query_time、後端連接池狀態。| 方案 | 成熟度 | 功能 | 適用場景 |
|---|---|---|---|
| MySQL Router | GA (8.0+) | 讀寫分離、自動故障轉移、配置簡單 | InnoDB Cluster / Replication Set |
| ProxySQL | GA | 多層路由、查詢改寫、快取、熔斷、統計詳盡 | 高併發、多租戶、混合負載 |
| MaxScale | GA | MariaDB 生態、Binlog 過濾、CDC、安全審計 | MariaDB 叢集、合規要求高 |
| MySQL Proxy | Alpha (停更) | Lua 腳本極致靈活 | 舊版本維護、特殊路由邏輯 |
MySQL Proxy 以 Lua 腳本賦予了無限可能,但生產環境建議遷移至 MySQL Router 或 ProxySQL 獲得長期支援與穩定性保障。