MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。
MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
MySQL Proxy更强大的一项功能是实现“读写分离”,基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。
官网:
http://dev.mysql.com/doc/mysql-proxy/en/
1.环境配置
master 192.168.0.109
slave 192.168.0.110
slave 192.168.0.112
已经配置好主从复制,基于gtid 事务的复制。mysql版本5.7.12
数据库统一访问用户:root 密码:abc123 并授权其他机器访问
grant all privileges on test_db.* to 'root'@'%' identified by 'abc123';
flush privileges;
创建了数据库
test_db,和表temp。
2.
安装mysql-proxy
实现读写分离是由lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装
tar -zxvf
mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy
3.配置mysql-proxy
cd mysql-proxy
mkdir lua #创建脚本存放目录
mkdir logs #创建日志目录
mkdir conf #放置配置文件
cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件
cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本
vi conf/
mysql-proxy.cnf
[mysql-proxy]
daemon=true #以守护进程方式运行
user=root #运行mysql-proxy用户
pid-file=/root/mysql-proxy/logs/mysql-proxy.pid #进程pid文件
keepalive=true #mysql-proxy崩溃时,尝试重启
event-threads=4 #
event-handing线程数,默认值是1
max-open-files=2048 #
最大文件句柄数
log-level=info #
日志级别:error|warning|info|message|debug
#log-use-syslog=true #
日志使用syslog,和log-file只能开启一个
log-file=/root/mysql-proxy/logs/
mysql-proxy.log #
日志文件
admin-username=root #主从mysql共有的用户
admin-password=abc123 #用户的密码
admin-address=192.168.0.112:4040 #mysql-proxy运行ip和端口,不加端口,默认4040
admin-lua-script=/root/mysql-proxy/lua/admin-sql.lua #指定管理脚本
proxy-skip-profiling=true
#是否禁用查询性能剖析
proxy-backend-addresses=192.168.0.109:3306 #后端mysql的ip和port
proxy-read-only-backend-addresses=192.168.0.110:3306,192.168.0.112:3306 #指定后端从slave读取数据,
多个以逗号分隔,超过2条换行写
proxy-lua-script=/root/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置
由于安全要求,必须将配置文件权限设为660(创建人可读写,同组人可读),否则不允许启动。
chmod 660 conf/mysql-proxy.cnf
4.修改读写分离脚本
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,
#默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 1,
默认8,改为1
is_debug = false
}
end
5.启动mysql-proxy
bin/mysql-proxy --defaults-file=conf/mysql-proxy.cnf
使用多个客户端查询,添加数据测试。
参考文章:
4.
mysql-proxy