在 CentOS 上從原始碼編譯 Lua、MySQL Proxy,並啟用內建 rw-splitting.lua 實現讀寫分離,含完整指令與驗證過程。
| 角色 | IP | 說明 |
|---|---|---|
| MySQL Proxy | 192.168.0.234 | Port 4040 |
| Master (可寫) | 192.168.0.235 | Port 3306 |
| Slave (唯讀) | 192.168.0.236 | Port 3306,已 STOP SLAVE |
tar zxvf lua-5.1.2.tar.gz -C /usr/local
cd /usr/local && mv lua-5.1 lua && cd lua
make linux test && make install
export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"
tar zxvf mysql-proxy-0.8.2.tar.gz -C /usr/local/mysql
cd /usr/local/mysql && mv mysql-proxy-0.8.2 mysql-proxy
cd mysql-proxy
./configure --prefix=/usr/local/mysql-proxy --with-lua=/usr/local
make && make install
export PATH=$PATH:/usr/local/mysql-proxy/bin
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-proxy/share/mysql-proxy/rw-splitting.lua \
--daemon --pid-file=/var/run/mysql-proxy.pid --log-file=/var/log/mysql-proxy.log
啟動腳本寫入 /etc/init.d/mysql-proxy 並 chkconfig --add 開機自啟。
mysql -u t_girl_user -p123456 -P 4040 -h 192.168.0.234 -D t_girl
mysql> INSERT INTO t(c_str) VALUES('wangwang');
Query OK, 1 row affected
mysql> SHOW PROCESSLIST;
-- 僅 Master (235) 出現 Sleep 連線,證實寫入走 Master
mysql> SELECT * FROM t;
+----+----------+
| id | c_str |
+----+----------+
| 1 | B | -- 原有 Slave 資料
| 2 | wangwang | -- 新寫入資料 (同步後可見)
+----+----------+
mysql> SHOW PROCESSLIST;
-- Slave (236) 出現 Query 連線,證實讀取走 Slave
proxy.global.config.rw_split 微調。完成部署後,應用只需將 JDBC/連線字串指向 192.168.0.234:4040 即可透明享受讀寫分離。