使用mysql-proxy 监听 mysql 查询

  • Post category:other

使用mysql-proxy监听mysql查询的完整攻略,包括以下步骤:

  1. 安装mysql-proxy:从mysql-proxy官网下载mysql-proxy并安装。

  2. 编写lua脚本:编写lua脚本以监听mysql查询。

lua
function read_query(packet)
if packet:byte() == proxy.COM_QUERY then
local query = packet:sub(2)
print(query)
end
end

  1. 启动mysql-proxy:使用以下命令启动mysql-proxy。

bash
mysql-proxy --proxy-lua-script=/path/to/lua/script.lua

  1. 连接mysql-proxy:使用以下命令连接mysql-proxy。

bash
mysql -h 127.0.0.1 -P 4040

  1. 执行查询:在mysql客户端中执行查询。

  2. 查看结果:在mysql-proxy的控制台中查看查询结果。

以下是两个示例说明:

示例1:拦截查询

以下是拦截查询的示例:

  1. 编写lua脚本:编写以下lua脚本以拦截查询。

lua
function read_query(packet)
if packet:byte() == proxy.COM_QUERY then
local query = packet:sub(2)
if string.match(query, "SELECT") then
proxy.queries:append(1, packet, {resultset_is_needed = true})
return proxy.PROXY_SEND_QUERY
end
end
end

  1. 启动mysql-proxy:使用以下命令启动mysql-proxy。

bash
mysql-proxy --proxy-lua-script=/path/to/lua/script.lua

  1. 连接mysql-proxy:使用以下命令连接mysql-proxy。

bash
mysql -h 127.0.0.1 -P 4040

  1. 执行查询:在mysql客户端中执行查询。

sql
SELECT * FROM users;

  1. 查看结果:在mysql-proxy的控制台中查看查询结果。

示例2:修改查询

以下是修改查询的示例:

  1. 编写lua脚本:编写以下lua脚本以修改查询。

lua
function read_query(packet)
if packet:byte() == proxy.COM_QUERY then
local query = packet:sub(2)
if string.match(query, "SELECT") then
local new_query = string.gsub(query, "users", "customers")
proxy.queries:append(1, proxy.packet.COM_QUERY, {string.char(string.len(new_query)) .. new_query})
return proxy.PROXY_SEND_QUERY
end
end
end

  1. 启动mysql-proxy:使用以下命令启动mysql-proxy。

bash
mysql-proxy --proxy-lua-script=/path/to/lua/script.lua

  1. 连接mysql-proxy:使用以下命令连接mysql-proxy。

bash
mysql -h 127.0.0.1 -P 4040

  1. 执行查询:mysql客户端中执行查询。

sql
SELECT * FROM users;

  1. 查看结果:在mysql-proxy的控制台中查看查询结果,应该是从”users”表中查询到的数据,但是查询语句中的”users”已被替换为”customers”。