MySQL-Proxy簡介
mysql-proxy是mysql官方提供的mysql中間件服務,上游可接入若干個mysql-client,后端可連接若干個mysql-server。它使用mysql協議,任何使用mysql-client的上游無需修改任何代碼,即可遷移至mysql-proxy上。mysql-proxy最基本的用法,就是作為一個請求攔截,請求中轉的中間層:

進一步的,mysql-proxy可以分析與修改請求。攔截查詢和修改結果,需要通過編寫Lua腳本來完成。mysql-proxy允許用戶指定Lua腳本對請求進行攔截,對請求進行分析與修改,它還允許用戶指定Lua腳本對服務器的返回結果進行修改,加入一些結果集或者去除一些結果集均可。
根本上,mysql-proxy是一個官方提供的框架,具備良好的擴展性,可以用來完成:
- sql攔截與修改
- 性能分析與監控
- 讀寫分離
- 請求路由
下載

需求
- 1臺MySQL-Proxy機器,IP:192.168.1.106
- 1臺MySQl主服務器(可讀可寫),IP:192.168.1.107
- 1臺MySQL從服務器(只讀),IP:192.168.1.109
解壓MySQL-Proxy
在192.168.1.106上解壓:
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

重命名文件

MySQL配置
創建mysql-proxy.cnf
vim mysql-proxy.cnf
[mysql-proxy]
admin-username=root #admin用戶名
admin-password=root admin密碼
proxy-address=192.168.1.106:4040 # 代理地址
proxy-backend-addresses=192.168.1.107:3306 #mysql主服務器ip地址,默認端口3306
proxy-read-only-backend-addresses=192.168.1.109:3306 #mysql從服務器ip地址,有多個逗號隔開 ip:port,ip:port,ip:port
proxy-lua-script=/cyb/soft/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua #lua位置
log-file=/cyb/soft/mysql-proxy/log/mysql-proxy.log #日志文件存儲路徑
log-level=debug
daemon=true # mysql-proxy以守護進程方式運行
keepalive=true #保持連接啟動進程會有2個, 一號進程用來監視二號進程

創建log目錄

修改mysql-proxy.cnf文件的權限
chmod 660 mysql-proxy.cnf

修改rw-splitting.lua
vim /cyb/soft/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua


min_idle_connections:最小閑置連接數
max_idle_connections:最大閑置連接數
MySQL-Proxy啟動
./mysql-proxy --defaults-file=/cyb/soft/mysql-proxy.cnf

測試
在192.168.1.106上關閉防火墻
service iptables stop
chkconfig iptables off


演示過程中,有2次連不上,原因不明,還有待查證,目前功能是已經實現了,注意,此時連mysql-proxy的端口已經不是3306了,是4040