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

MySQL Proxy 實戰:讀寫分離部署完整步驟

     編輯:MySQL 資料庫相關知識

環境準備

角色IP說明
MySQL Proxy192.168.0.234代理節點 A
MySQL Master (可寫)192.168.0.235節點 B
MySQL Slave (唯讀)192.168.0.236節點 C,已停止複制

軟體安裝

1. Lua 5.1.2

tar zxvf lua-5.1.2.tar.gz -C /usr/local
cd /usr/local && mv lua-5.1 lua && cd lua
make local && make install
export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"

2. MySQL Proxy 0.6.1

tar zxvf mysql-proxy-0.6.1-linux-rhel4-x86-32bit.tar.gz -C /usr/local/mysql/
cd /usr/local/mysql && mv mysql-proxy-0.6.1-linux-rhel4-x86-32bit mysql-proxy
export PATH=$PATH:/usr/local/mysql/mysql-proxy/sbin/

啟動讀寫分離

mysql-proxy \
  --proxy-read-only-backend-addresses=192.168.0.236:3306 \
  --proxy-backend-addresses=192.168.0.235:3306 \
  --proxy-lua-script=/usr/local/mysql/mysql-proxy/share/mysql-proxy/rw-splitting.lua &

監聽預設 4040 埠。rw-splitting.lua 內建讀寫分離邏輯。

自動啟動腳本

#!/bin/sh
export PATH=$PATH:/usr/local/mysql-proxy
cd /usr/local/mysql-proxy
./mysql-proxy \
  --proxy-read-only-backend-addresses=192.168.0.236:3306 \
  --proxy-backend-addresses=192.168.0.235:3306 \
  --proxy-lua-script=rw-splitting.lua >> /tmp/log 2>&1 &

驗證測試

客戶端連線

mysql -u t_girl_user -p123456 -P 4040 -h 192.168.0.234 -D t_girl

寫入測試(路由至 Master B)

INSERT INTO t(c_str) VALUES ('wangwang');
-- Master B 可見新資料
SELECT * FROM t;  -- 顯示 B, wangwang

讀取測試(路由至 Slave C)

SELECT * FROM t;  -- 僅顯示 C (原始資料),Master 新寫入不可見
-- 因 Slave 停止複制,驗證路由生效

再次寫入

INSERT INTO t(c_str) VALUES ('wangwei');
SELECT * FROM t;  -- Slave 仍只見 C,Master 見 B, wangwang, wangwei

觀察重點

  • SHOW PROCESSLIST 確認連線分佈
  • Master/Slave 資料差異證明讀寫分離生效
  • Slave 停止複制模擬極端延遲,Proxy 仍正確路由讀請求

注意事項

  • 生產環境 Slave 應正常複制,Proxy 僅負責路由
  • Proxy 單點需部署多節點 + VIP/Keepalived
  • 連接池配置優化:--proxy-pool-no-change-user、--max-open-files
  • 監控 Proxy 狀態:--admin-username/--admin-password/--admin-lua-script
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved