Bandera: Русский Русский Bandera: English English

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:

  1. Intercepción — la solicitud del cliente llega al proxy.
  2. 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 (agregar WHERE, LIMIT, registrar, etc.).

    El MySQL Proxy original utilizaba scripts en Lua para esta lógica.

  3. 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.
  4. 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íaTareasEjemplos de uso
EscalabilidadRead/Write Split, balanceo, shardingDistribución de la carga en un clúster
DisponibilidadFailover, monitoreo del estado de los servidoresConmutación automática en caso de fallo
OptimizaciónCaché, multiplexación, poolingReducción de la carga en la BD
SeguridadAuditoría, filtrado, bloqueo de inyecciones SQLRegistro, whitelist/blacklist
ObservabilidadEstadísticas de consultas, perfiladoDetección de consultas lentas

Tipos de MySQL Proxy

1. Proxies conscientes de SQL (entienen SQL y el protocolo MySQL)

ProxyDesarrolladorFunciones principalesMultiplexaciónCaché de resultadosRead/Write SplitFailoverShardingSoporte activo
ProxySQLProxySQL TeamAlto rendimiento, Query Rules, monitoreo, caché✅ Sí✅ Sí✅ Sí✅ Sí❌ No✅ Sí (activo)
MaxScaleMariaDBArquitectura de plugins, monitores, filtros, auditoría❌ No❌ No✅ Sí✅ Sí✅ Sí (a través de plugins)✅ Sí
MySQL RouterOracleSencillo, integración con InnoDB Cluster❌ No❌ No✅ Sí✅ Sí❌ No✅ Sí
Vitess (VTGate)YouTube / CNCFEscalado 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.
  • ShardingVitess y MaxScale (con plugins).

2. Proxies TCP / Capa 4 (operan a nivel de conexión)

ProxyDescripciónLimitaciones
HAProxyBalanceador TCP/HTTP de alto rendimientoNo analiza SQL → read/write split solo por puertos/IP
KeepalivedProporciona VIP (IP virtual) para HANo 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?

TareaRecomendaciónPor qué
Read/Write Split + caché + multiplexaciónProxySQLLigero, rápido, reglas flexibles
MariaDB + plugins + shardingMaxScaleIntegración profunda con MariaDB
MySQL InnoDB Cluster / Group ReplicationMySQL RouterSoporte oficial de Oracle
Escalar a 1000+ shards (nube)VitessArquitectura orientada a gran escala
Balanceador simple delante de varios ProxySQLHAProxy + KeepalivedNivel 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.

¿Necesitas ayuda?

Escríbeme y te ayudaré a resolver el problema

Publicaciones relacionadas