Linux MySQL Proxy 讀寫分離
導讀
因為讀寫分離是建立在MySQL集群主從複製的基礎上,還不了解的,先看我另一篇部落格:點我直達
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攔截與修改
- 性能分析與監控
- 讀寫分離
- 請求路由
下載
官網鏈接:點我直達
百度雲盤地址:https://pan.baidu.com/s/1Aw1laIWYJVvHYshHXw4p_Q 密碼: 9qif
需求
- 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