ITPub博客

首页 > 数据库 > MySQL > MySQL Proxy

MySQL Proxy

原创 MySQL 作者:T1YSL 时间:2025-08-13 16:51:39 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MySQL的主从复制
下一篇: mysqldump使用示例
请登录后发表评论 登录
全部评论
中国开源软件推进联盟PG分会系列技术丛书《快速掌握PostgreSQL版本新特性》一书副主编。数据库技术专家。数据库认证讲师、恩墨学院数据库讲师。擅长MySQL数据库、PostgreSQL等开源数据库。拥有MySQL-OCP 、PostgreSQL-PGCM等数据库认证。

注册时间:2020-12-12

  • 博文量
    152
  • 访问量
    160663