MySQL Replication能夠將master的數據複製分佈到多個slave上,而後利用slave來分擔master的讀壓力。mysql
MySQL-Proxy 是處在MySQL數據庫客戶端和服務端之間的程序,它支持嵌入Lua。這個代理能夠用來分析、監控和變換通訊數據,支持很是普遍的使用場景:sql
mysql-proxy 命令的選項設置:shell
--admin-address=host:port # mysql-proxy管理端口(缺省端口是4041) --proxy-address=host:port # mysql-proxy 監聽端口(缺省端口是4040) --proxy-backend-addresses=host:port # 遠程MySQL服務器地址和端口,能夠設置多個 --proxy-read-only-backend-addresses=host:port # 遠程只讀Slave服務器的地址和端口 --proxy-skip-profiling # 關閉查詢分析功能,默認是打開的 --proxy-lua-script=file # 指定一個Lua腳原本控制mysql-proxy的運行和設置 --daemon # 以守護進程方式運行 --pid-file=file # pid文件路徑
MySQL Proxy做爲一個鏈接池,負責將client的鏈接請求轉發給後臺的數據庫。經過Lua腳本,能夠實現複雜的鏈接控制和過濾,從而實現讀寫分離和負載均衡。數據庫
對於client來講,MySQL Proxy是徹底透明的,client只須要鏈接到MySQL Proxy的監聽端口便可。服務器
經過下面的lua腳本實現讀寫分離: 負載均衡
-- mysql-proxy/scripts/rw-splitting.lua -- connection pool if not proxy.global.config.rwsplit then proxy.global.config.rwsplit = { min_idle_connections = 1, -- 默認爲4 max_idle_connections = 1, -- 默認爲8 is_debug = false } end
參考文檔:lua
http://jan.kneschke.de/2007/8/1/mysql-proxy-learns-r-w-splitting/spa