本文在 Windows 環境下完整演示 MySQL 主從搭建、MySQL Proxy 讀寫分離配置,涵蓋 my.ini 參數、復制賬號授權、Binlog 位點獲取、Proxy Lua 腳本調優、日誌驗證全鏈路。
[mysqld]
log-bin=mysql-bin
log-bin-index=mysql-bin.index
server-id=1
sync_binlog=1
binlog_format=MIXED
binlog-do-db=test
binlog-ignore-db=mysql,performance_schema,information_schema
重啟服務:net stop mysql && net start mysql
GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.174.131' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
SHOW MASTER STATUS\G;
-- 記錄 File (如 mysql-bin.000008) 和 Position (如 170)
[mysqld]
server-id=2
log-bin=mysql-bin
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
sync_master_info=1
sync_relay_log=1
sync_relay_log_info=1
CHANGE MASTER TO
MASTER_HOST='192.168.174.130',
MASTER_USER='root',
MASTER_PORT=3306,
MASTER_PASSWORD='root',
MASTER_LOG_FILE='mysql-bin.000008',
MASTER_LOG_POS=170;
START SLAVE;
SHOW SLAVE STATUS\G;
-- 關鍵:Slave_IO_Running=Yes, Slave_SQL_Running=Yes
mysql-proxy.conf[mysql-proxy]
admin-username=root
admin-password=123456
admin-lua-script=C:/mysql-proxy/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses=192.168.174.130:3306
proxy-read-only-backend-addresses=192.168.174.131:3306
proxy-lua-script=C:/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=C:/mysql-proxy/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
默認 rw-splitting.lua 中 min_idle_connections=4,會話數 <4 時不分離。
修改為 1 即可立即生效讀寫分離。
mysql-proxy -P 192.168.174.133:4040 --defaults-file=C:/mysql-proxy/bin/mysql-proxy.conf
2014-12-19 16:27:40: (message) proxy listening on port 192.168.174.133:4040
2014-12-19 16:27:40: (message) added read/write backend: 192.168.174.130:3306
2014-12-19 16:27:40: (message) added read-only backend: 192.168.174.131:3306
192.168.174.133:4040BEGIN/COMMIT)。| 問題 | 原因 | 解決 |
|---|---|---|
| Proxy 啟動報错 missing lua | 路徑含中文/空格 | 安裝路徑純 ASCII,無空格 |
| 讀寫不分離 | min_idle_connections 過大 | 改為 1 或預熱連接池 |
| Slave 延遲導致讀舊數據 | 異步復制本質 | 關鍵業務強制走 Master 或半同步復制 |
| Proxy 單點故障 | 無 HA | 前置 Keepalived/VIP 或換成 ProxySQL/MaxScale |