MySQL Proxy: Intermediario para bases de datos 🛠️
Publicado el 28.10.2025
MySQL Proxy — es una aplicación intermediaria que se sitúa entre aplicaciones cliente (por ejemplo, su servidor web) y uno o varios servidores MySQL. Utiliza el protocolo de red de MySQL (MySQL Network Protocol), lo que permite a cualquier cliente compatible con MySQL conectarse al proxy sin cambios, pensando que se comunica directamente con el servidor MySQL.
Cómo Funciona MySQL Proxy
En su configuración básica el proxy simplemente reenvía las solicitudes del cliente al servidor MySQL y devuelve las respuestas.
Sin embargo, la característica clave de MySQL Proxy y sus equivalentes es el monitoreo, análisis y modificación del tráfico que pasa:
- Intercepción — la solicitud del cliente llega al proxy.
- Análisis/Modificación — el proxy parsea el SQL (por ejemplo, determina el tipo de operación:
SELECT,INSERT,UPDATE,DELETE) y puede cambiar la consulta (agregarWHERE,LIMIT, registrar, etc.).El MySQL Proxy original utilizaba scripts en Lua para esta lógica.
- Enrutamiento/Acción — basado en el análisis:
- Enviar al master (escritura) o a la réplica (lectura).
- Balancear la carga (Round-Robin, least connections, etc.).
- Multiplexar conexiones — miles de clientes → decenas de conexiones backend.
- Procesamiento de la respuesta — modificar o analizar el resultado antes de devolverlo al cliente.
Todo ello — sin cambios en el código de la aplicación ni en el servidor MySQL.
Funciones Principales y Tareas
| Categoría | Tareas | Ejemplos de uso |
|---|---|---|
| Escalabilidad | Read/Write Split, balanceo, sharding | Distribución de la carga en un clúster |
| Disponibilidad | Failover, monitoreo del estado de los servidores | Conmutación automática en caso de fallo |
| Optimización | Caché, multiplexación, pooling | Reducción de la carga en la BD |
| Seguridad | Auditoría, filtrado, bloqueo de inyecciones SQL | Registro, whitelist/blacklist |
| Observabilidad | Estadísticas de consultas, perfilado | Detección de consultas lentas |
Tipos de MySQL Proxy
1. Proxies conscientes de SQL (entienen SQL y el protocolo MySQL)
| Proxy | Desarrollador | Funciones principales | Multiplexación | Caché de resultados | Read/Write Split | Failover | Sharding | Soporte activo |
|---|---|---|---|---|---|---|---|---|
| ProxySQL | ProxySQL Team | Alto rendimiento, Query Rules, monitoreo, caché | ✅ Sí | ✅ Sí | ✅ Sí | ✅ Sí | ❌ No | ✅ Sí (activo) |
| MaxScale | MariaDB | Arquitectura de plugins, monitores, filtros, auditoría | ❌ No | ❌ No | ✅ Sí | ✅ Sí | ✅ Sí (a través de plugins) | ✅ Sí |
| MySQL Router | Oracle | Sencillo, integración con InnoDB Cluster | ❌ No | ❌ No | ✅ Sí | ✅ Sí | ❌ No | ✅ Sí |
| Vitess (VTGate) | YouTube / CNCF | Escalado a miles de shards, orientado a la nube | ✅ Sí | ✅ Sí (limitado) | ✅ Sí | ✅ Sí | ✅ Sí | ✅ Sí |
Nota:
- Multiplexación — solo ProxySQL y Vitess.
- Caché de resultados SELECT — solo ProxySQL y Vitess.
- Sharding — Vitess y MaxScale (con plugins).
2. Proxies TCP / Capa 4 (operan a nivel de conexión)
| Proxy | Descripción | Limitaciones |
|---|---|---|
| HAProxy | Balanceador TCP/HTTP de alto rendimiento | No analiza SQL → read/write split solo por puertos/IP |
| Keepalived | Proporciona VIP (IP virtual) para HA | No es un proxy, sino una herramienta para la alta disponibilidad del propio proxy |
Recomendación: HAProxy se usa frecuentemente en conjunto con proxies conscientes de SQL (por ejemplo, HAProxy → varios ProxySQL).
⚠️ Importante: El MySQL Proxy original (de Oracle)
Obsoleto y no mantenido desde 2014 (último release — 0.8.5).
No se recomienda su uso en producción.
Todas sus funciones (y muchas más) están implementadas en alternativas modernas.
ℹ️ Oracle no desarrolla el MySQL Proxy open-source.
En MySQL Enterprise existe MySQL Router, pero no reemplaza a un proxy consciente de SQL completo.
Ejemplo: Configuración simple de ProxySQL (Read/Write Split)
-- Определяем бэкенды
insert into mysql_servers(hostgroup_id, hostname, port) values
(10, 'mysql-master', 3306), -- hostgroup 10 = запись
(20, 'mysql-slave-1', 3306), -- hostgroup 20 = чтение
(20, 'mysql-slave-2', 3306);
-- Правило: SELECT → на реплики, всё остальное → на мастер
insert into mysql_query_rules(rule_id, active, match_pattern, destination_hostgroup) values
(1, 1, '^SELECT.*FOR UPDATE$', 10),
(2, 1, '^SELECT', 20),
(3, 1, '.*', 10);
load mysql servers to runtime;
save mysql servers to disk;
load mysql query rules to runtime;
save mysql query rules to disk;
Cómo elegir un proxy?
| Tarea | Recomendación | Por qué |
|---|---|---|
| Read/Write Split + caché + multiplexación | ProxySQL | Ligero, rápido, reglas flexibles |
| MariaDB + plugins + sharding | MaxScale | Integración profunda con MariaDB |
| MySQL InnoDB Cluster / Group Replication | MySQL Router | Soporte oficial de Oracle |
| Escalar a 1000+ shards (nube) | Vitess | Arquitectura orientada a gran escala |
| Balanceador simple delante de varios ProxySQL | HAProxy + Keepalived | Nivel TCP + HA |
Conclusión
MySQL Proxy es una herramienta potente para la escalabilidad, alta disponibilidad y seguridad de bases de datos.
Las soluciones modernas (ProxySQL, MaxScale, Vitess) han sustituido completamente al proxy original obsoleto de Oracle.
Elija un proxy consciente de SQL si necesita flexibilidad.
Proxies TCP — solo para escenarios simples o en combinación.