首页 > 数据库 > MySQL > MySQL Proxy
MySQL Proxy是位于mysql的客户端和服务器之间的中间层
MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发到后台数据库,并且通过使用lua脚本,实现复杂的连接控制和过滤,从而实现读写分离和负载均衡。
MySQL Proxy对于应用程序来说是完全透明的。
MySQL Proxy实现读写分离的原理就是将事务性语句交给主服务器操作,让从数据库处理select查询。
配置mysql代理
实验环境:
A:172.16.254.200 —— master
B:172.16.254.100 —— slave
P:172.16.254.180 —— proxy
1、安装代理软件(180)
配IP
[root@proxy ~]# rpm -ivh mysql-proxy-0.8.1-1.el6.x86_64.rpm
------------------------------
如果报错
error: Failed dependencies:
libevent-1.4.so.2()(64bit) is needed by mysql-proxy-0.8.1-1.el6.x86_64
执行如下操作:
yum install libevent -y
------------------------------
2、拷贝读写分离脚本到指定目录
[root@proxy ~]# cp rw-splitting.lua /usr/share/doc/mysql-proxy-0.8.1/examples/
3、修改配置文件(180)
[root@proxy ~]# vim /etc/sysconfig/mysql-proxy
修改最后一行:
PROXY_OPTIONS="--daemon --log-level=info --log-use-syslog -b 172.16.254.200 -r 172.16.254.100 -s /usr/share/doc/mysql-proxy-0.8.1/examples/rw-splitting.lua -P 0.0.0.0:3306"
查看命令的帮助:mysql-proxy --help
-b:指定主服务器的IP,可读写
-r:指定从服务器的IP,只读
-s:指定使用的脚本
-P:表示监听本机的哪些IP地址及端口
4、启动代理服务器
[root@proxy ~]# /etc/init.d/mysql-proxy start
日志在 /var/log/messages
5、测试代理是否可用
在master上添加一个用户
mysql> grant all on *.* to proxy@'%' identified by 'nihao';
使用proxy用户登录数据库
[root@s200 mysql]# mysql -u proxy -pnihao -h 172.16.254.200
[root@s200 mysql]# mysql -u proxy -pnihao -h 172.16.254.100
如果从服务器无法登录,请查看配置文件中是否有skip-name-resolve行
[root@s200 mysql]# mysql -u proxy -pnihao -h 172.16.254.180
---------------------------------
验证读写分离
1、客户端通过代理服务器连接到数据库
多连接几个
1)验证写的操作
在主服务器和从服务器上执行以下语句:
tcpdump -i eth0 tcp port 3306 //抓包
在客户端执行一个写的操作
mysql> create database rwx;
然后到主服务器上查看抓包情况,会发现代理直接请求主服务器的连接,证明写的操作是在主服务器上完成的。
15:22:03.835055 IP 172.16.254.180.48117 > 172.16.254.200.mysql
代理服务器 主服务器
2)验证读的操作
理论上读的请求会被代理发送给slave服务器
做了读写分离之后,对于数据库的写入操作,是在主服务器上完成的;从服务器上数据的更新靠的是AB复制。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69990629/viewspace-3093378/ ,如需转载,请注明出处,否则将追究法律责任。