MySQL Proxy
MySQL Proxy 是一个处于你的 client 端和 MySQL server 端之间的简单程序, 它可以监测分析或改变它们的通信它使用灵活, 没有限制, 常见的用途包括: 负载平衡, 故障查询分析, 查询过滤和修改等等
MySQL Proxy 就是这么一个中间层代理, 简单的说, MySQL Proxy 就是一个连接池, 负责将前台应用的连接请求转发给后台的数据库, 并且通过使用 lua 脚本, 可以实现复杂的连接控制和过滤, 从而实现读写分离和负载平衡对于应用来说, MySQL Proxy 是完全透明的, 应用则只需要连接到 MySQL Proxy 的监听端口即可当然, 这样 proxy 机器可能成为单点失效, 但完全可以使用多个 proxy 机器做为冗余, 在应用服务器的连接池配置中配置到多个 proxy 的连接参数即可
MySQL Proxy 更强大的一项功能是实现读写分离, 基本原理是让主数据库处理事务性查询, 让从库处理 SELECT 查询数据库复制被用来把事务性查询导致的变更同步到集群中的从库
实验
实验环境
- server1 192.168.122.11 master
- server2 192.168.122.12 slave
- server3 192.168.122.13 proxy
一. 安装 mysql-proxy 并配置
解压到指定路径
[root@server3~]#tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local
改名字
[root@server3local]# mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy
建目录
- [root@server3 mysql-proxy]# mkdir etc
- [root@server3 mysql-proxy]# mkdir logs
写配置文件
[root@server3 etc]# vim mysql-proxy.conf
加权限
[root@server3 etc]# chmod 660 mysql-proxy.conf
改参数
- [root@server3 mysql-proxy]# vim rw-splitting.lua
- [root@server3 mysql-proxy]# pwd
- /usr/local/mysql-proxy/share/doc/mysql-proxy
运行脚本开启服务
[root@server3bin]# /usr/local/mysql-proxy/bin/mysql-proxy --plugins=admin --plugins=proxy --defaults-file=/usr/local/mysql-proxy/etc/mysql-proxy.conf
检查端口
netstate -antlup
二主机 master 进行授权 (192.168.122.11)
- mysql>grant select, update, insert on *.* to proxy@'192.168.122.%' identified by 'LH=redhat123';
- (slave 会同步授权)
在 proxy 主机登录
[root@server3 ~]# mysql -uadmin -pwestos -P 4041 -h 192.168.122.13
查看 mysql 主, 备状态
在客户端远程登录数据库
[root@server4 ~]# mysql -h 192.168.122.13 -uproxy -pLH=redhat123
写入数据
在 proxy 主机查看
(master 状态已经改变)
再次在客户端登录
[root@server5 ~]# mysql -h 192.168.122.13 -uproxy -pLH@redhat123
查看 proxy
三检查是否实现数据分离
为了清楚看到数据传输状况
[root@server3 ~]# yum install tcpdump
[root@server3 ~]# yum install -y lsof
来源: http://www.bubuko.com/infodetail-2518772.html