rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 数据库 » MySQL

mysql-proxy 介绍、分析

1:作用:监控、过滤或者修改query、失败检测、负载均衡等

2:安装:自己折腾

3:脚本剖析

对于Mysql-proxy的使用,对于我们不会去修改源代码的人来说,真正的精髓在于编写适合自己的lua程序,

首先,看下mysql认证,执行的流程图

mysql-proxy 介绍、分析

下面来分析下通过lua脚本的执行流程:对于mysql-proxy,他其实就在client---server中添加的一道门,认证、提交、返回结果都需要经过他,他通过lua程序,来实现client---server 认证执行的控制工作。如下图:

mysql-proxy 介绍、分析

分析下mysql-proxy使用的具体函数
1)
connect_server()

该函数,决定mysql连接的后端server,当有client连接时候,第一个触发该函数

2)read_handshake()

在client connect后,server 返回的handshake信息,如果要显示及控制返回的handshake信息,需在此函数控制

3)read_auth()


read_handshake()触发后,立即触发read_auth(),用官方的话说就是:The read_auth()function is triggered when an authentication handshake is initiated by theclient. In the execution sequence, read_auth()occurs immediately after read_handshake(),so the server selection has already been made, but the connection andauthorization information has not yet been provided to the backend server(我想这个函数应该可以修改client的用户名即密码,但是我没有实验,有兴趣可以写写程序)

4)read_auth_result()

捕获Server对于认证的反馈信息,并可以通过自己意思来修改这些信息,例如:认证通过返回什么给客户端

5)read_query()

每次提交query时,都会触发该函数,所有的一切关于query的控制都在此函数中,例如:可以控制query的发送方向、是否修改query、是否添加query等

6)read_query_result()

当你需要修改query时,你必须手动维一个队列,里面包含新添加的query,并且每个query都会有一个ID。当mysql-proxy发现有语句有队列时,他会触发该函数,没有队列,则不会调用该函数,该函数是控制队列里query的结果的显示情况

7) disconnect_client()

这个函数在官网中貌似并没有介绍,他主要是当client断开时触发的,主要应该是断开server需要进行的操作(我主要用在维护pool上)。
在现实中,可以通过以上函数,来编写出适合大家的mysql代理层

4:使用:

我目前是这样(/usr/bin/mysql-proxy -b 10.50.21.130:3306 -r 10.0.0.3:3308--proxy-lua-script=/home/yangting/lua-proxy/rw-splitting-yt.lua --pid-file=/var/run/mysql-proxy.pid--log-level=message --daemon --keepalive --log-file=/var/log/mysql-proxy.log)(http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy-using.html)

5:推荐编写的时候使用mysqlsniffer

工具下载:http://hackmysql.com/mysqlsniffer

安装:apt-get install libpcap0.8

apt-get install libpcap0.8-dev

gcc -O2 -lpcap -o mysqlsniffermysqlsniffer.c packet_handlers.c misc.c

mysql-proxy更详细的细节部分,大家可以看官网介绍:(http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy.html)

顶一下
(0)
踩一下
(0)