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

MySQL Proxy 實戰:讀寫分離、負載均衡與 Lua 腳本靈活路由

     編輯:MySQL 資料庫相關知識

MySQL Proxy 實戰部署指南

MySQL Proxy 作為中間層代理,對客戶端透明化後端數據庫拓撲,支援讀寫分離、負載均衡、SQL 過濾改寫、熔斷降級等高階功能。本文以雙主機雙節點環境為例,詳細記錄安裝、配置、授權與驗證全流程。

一、架構與角色

角色IP部署組件
Host A (Master)192.168.0.11MySQL Server (寫入節點)
Host B (Slave/Proxy)192.168.0.32MySQL Server (讀取節點) + MySQL Proxy

Proxy 監聽 4040 端口,後端掛載兩個 3306 實例,客戶端連接 Proxy 即可實現透明路由。

二、安裝方式

推薦:YUM/RPM 安裝 (避開編譯坑)

# 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

三、配置文件

1. 啟動腳本 /etc/init.d/mysql-proxy

PROXY_PATH=/usr/sbin   # 唯一需修改:mysql-proxy 二進制路徑
# 其餘照搬官方模板
chmod +x /etc/init.d/mysql-proxy

2. 參數配置 /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

六、進階:Lua 腳本實現讀寫分離

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"

七、生產環境注意事項

  1. 單點風險:Proxy 本身是單點,建議雙機熱備 + VIP (Keepalived/VRRP) 或 DNS 輪詢。
  2. 效能開銷:Proxy 解析/轉發 SQL 有微小延遲,極高 QPS 場景需壓測評估。
  3. 版本兼容:Proxy 0.8.x 屬 Alpha/Preview 階段,MySQL 8.0+ 建議改用 MySQL Router (官方 GA 組件)。
  4. 監控指標:proxy_connections_accepted、proxy_query_time、後端連接池狀態。

八、替代方案對比

方案成熟度功能適用場景
MySQL RouterGA (8.0+)讀寫分離、自動故障轉移、配置簡單InnoDB Cluster / Replication Set
ProxySQLGA多層路由、查詢改寫、快取、熔斷、統計詳盡高併發、多租戶、混合負載
MaxScaleGAMariaDB 生態、Binlog 過濾、CDC、安全審計MariaDB 叢集、合規要求高
MySQL ProxyAlpha (停更)Lua 腳本極致靈活舊版本維護、特殊路由邏輯

MySQL Proxy 以 Lua 腳本賦予了無限可能,但生產環境建議遷移至 MySQL Router 或 ProxySQL 獲得長期支援與穩定性保障。

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