mysql-proxy使用经验

1.安装

portinstall mysql-proxy


2.启动

mysql-proxy –proxy-lua-script=/usr/local/share/mysql-proxy/你自己的lua脚本.lua


3.需求

非windows监控数据保存在status表中,windows监控数据保存在win_status表中,两张表结构完全相同

+—————-+———————–+——+—–+———————+—————-+

| Field | Type | Null | Key | Default | Extra |

+—————-+———————–+——+—–+———————+—————-+

| StatusID | int(8) unsigned | NO | PRI | NULL | auto_increment |

| ServerID | smallint(4) unsigned | NO | | 0 | |

| IpAddress | varchar(15) | NO | MUL | | |

| OtherIp | varchar(48) | YES | | NULL | |

| CpuIdle | tinyint(2) unsigned | YES | | NULL | |

| Uptime | varchar(26) | YES | | NULL | |

……………….

想实现,根据一个IP在status表中先查询,如果status中不存在,则查询win_status表,用户发送的都是统一的SQL语句,类似:

SELECT * FROM status WHERE IpAddress=’x.x.x.x’ ORDER BY Time DESC LIMIT 1;


重点lua script如下:

1.hook查询语句,截获用户的sql语句,加以分析

function read_query_result (inj)


2.使用proxy.tokenize,拆分用户的SQL语句

local tokens = proxy.tokenize(inj.query)

for i = 1, #tokens do

print (i,tokens[i][’token_id’] , tokens[i][’token_name’], tokens[i][’text’] )

end


3.发送一条重新构造的sql

proxy.queries:append(1, string.char(proxy.COM_QUERY) .. winsql )

return proxy.PROXY_SEND_QUERY



Leave a Reply