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