Descubri esta herramienta paseandome por el sitio para desarrolladores de MySQL, no es novedad que me agrade mucho el uso de esta base de datos, andaba dando una vuelta para ver que habia de herramientas para mejorar desempeños de este buen gestor de base de datos y me tope con esta que tiene un sin fin de posibilidades respecto a lo que puede ofrecer.
Empezemos con definir ¿que es un proxy? de su definicion en ingles proxy - a person who speaks or acts on one’s behalf que signfica Persona que actua o habla en nombre de otra
En escencia esta herramienta se situa entre nuestra aplicacion que use la base de datos de MySQL y el Servidor de MySQL, el objetivo es que antes de que llegue al servidor poder hacer operaciones con la consulta o comando SQL que se esta enviando al gestor de base de datos, pero que podriamos hacer con eso:
1.- Hacer un Log de todas las consultas que recibe el Servidor
2.- Denegar consultas peligrosas que puedan dañar nuestra base de datos
3.- Generar Alias de comandos comunes por ejemplo SLE se podria convertir en SELECT
4.- Balancear la carga entre varios servidores de MySQL en un esquema de Master/Slave
5.- Dar prioridad a ciertas consultas para acelerar la respuesta del servidor
Estas son solo algunas de las posibles aplicaciones que se le podrian dar a esta herramienta, debo de aclarar que aun se encuentra en estado alpha es decir es un release demasiado pronto y puede llegar a no funcionar pertinentemente, hasta donde yo lo he podido explotar funciona bien y decentemente, esta herramienta tambien implementa un interprete de un lenguaje llamado LUA que es conocido por su sencillez y facilidad de uso.
Veamos un ejemplo de un script en LUA que guardar todas nuestras consultas en un archivo llamado mysql.log
assert(proxy.PROXY_VERSION >= 0x00600,
"you need at least mysql-proxy 0.6.0 to run this module")
local log_file = os.getenv("PROXY_LOG_FILE")
if (log_file == nil) then
log_file = "mysql.log"
end
local fh = io.open(log_file, "a+")
local query = "";
function read_query( packet )
if string.byte(packet) == proxy.COM_QUERY then
query = string.sub(packet, 2)
proxy.queries:append(1, packet )
return proxy.PROXY_SEND_QUERY
else
query = ""
end
end
function read_query_result (inj)
local row_count = 0
local res = assert(inj.resultset)
local num_cols = string.byte(res.raw, 1)
if num_cols > 0 and num_cols < 255 then
for row in inj.resultset.rows do
row_count = row_count + 1
end
end
local error_status =""
if res.query_status and (res.query_status < 0 ) then
error_status = "[ERR]"
end
if (res.affected_rows) then
row_count = res.affected_rows
end
--
-- write the query, adding the number of retrieved rows
--
fh:write( string.format("%s| %6d |--| %s| {%d} %s\n",
os.date('%Y-%m-%d %H:%M:%S'),
proxy.connection.server["thread_id"],
query,
row_count,
error_status))
fh:flush()
end
Este ejemplo lo tome de este articulo Getting started with MySQL-Proxy les recomiendo se den una vuelta por ahi para que vean la informacion que dan.
Por ultimo les recomiendo tambien que prueben el script LUA que les puse, los que son desarrolladores se sorprenderan de lo beneficioso que es la informacion que se obtiene de las consultas, ya que les permitira ver que es lo que realmente hace el server de MySQL y como mejorar sus consultas o sentencias SQL
Saludos
Dante Robles

