// Engineering Log

Bases de datos: Parte 7 — Proxies para MySQL: ProxySQL, MySQL Router y MaxScale

Publicado el 22.09.2026

// Ruta rapida

Este articulo pertenece al tema Servidores e infraestructura.

Proxy para MySQL — es un programa entre la aplicación y los servidores de base de datos. La aplicación se conecta al proxy como a un MySQL habitual, y el proxy decide a qué servidor enviar la consulta: escritura — al primario, lectura — a las réplicas, y en caso de fallo del primario — al nuevo primario. Para la aplicación el esquema de la base de datos puede cambiar, pero la dirección de conexión permanece siendo una sola.

Para qué sirve

  • Separación de lectura y escritura. Cuando la base tiene réplicas, el proxy envía SELECT a ellas, y las modificaciones — al servidor primario. No hace falta reescribir la aplicación para usar varias direcciones.
  • Pool de conexiones y multiplexación. Cientos de conexiones cliente son atendidos por un número menor de conexiones reales al servidor.
  • Tolerancia a fallos. El proxy comprueba los servidores y deja de enviar consultas a los que no están disponibles.
  • Reglas y protección. Se pueden limitar o reescribir consultas peligrosas, redirigir informes pesados a una réplica separada, cachear respuestas frecuentes.

El proxy no reemplaza la replicación ni las copias de seguridad: solo distribuye las consultas entre servidores ya configurados. Cómo funciona la replicación en MySQL — en la segunda parte de la serie.

MySQL Proxy — nombre histórico

El proyecto MySQL Proxy hace tiempo que no se desarrolla: su repositorio en GitHub fue archivado, los últimos cambios datan de julio de 2015. Aun se busca por ese nombre, pero para nuevas instalaciones se usan las herramientas que aparecen más abajo.

ProxySQL

ProxySQL — el proxy más extendido para MySQL y MariaDB, licencia GPLv3, la rama actual es 3.0 (la versión 3.0.11 se lanzó en agosto de 2026).

Conceptos principales:

  • hostgroup — grupo de servidores con un mismo rol: por ejemplo, 1 — servidor primario para escritura, 2 — réplicas para lectura;
  • reglas de consulta (mysql_query_rules) — expresiones regulares sobre el texto de la consulta que la envían al grupo adecuado;
  • interfaz de administrador — la configuración se guarda en tablas y se cambia con comandos SQL; los cambios se aplican con LOAD … TO RUNTIME y se guardan con SAVE … TO DISK.

Ejemplo de separación de lectura y escritura según la documentación de ProxySQL. Los comandos se ejecutan en la interfaz administrativa:

sql
-- servidores: 1 — escritura, 2 — lectura
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (1, '10.0.0.10', 3306);
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (2, '10.0.0.11', 3306);
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (2, '10.0.0.12', 3306);
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

-- por defecto el usuario escribe en el grupo 1
UPDATE mysql_users SET default_hostgroup = 1;
LOAD MYSQL USERS TO RUNTIME;

-- SELECT ... FOR UPDATE — al servidor primario, los demás SELECT — a las réplicas
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup, apply)
VALUES (1, 1, '^SELECT.*FOR UPDATE', 1, 1),
       (2, 1, '^SELECT', 2, 1);
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

La regla SELECT ... FOR UPDATE va primero: esas consultas bloquean filas y deben ejecutarse en el mismo servidor donde ocurre la escritura. Los desarrolladores de ProxySQL recomiendan no empezar enviando todos los SELECT a las réplicas, sino primero identificar por estadísticas (stats_mysql_query_digest) las consultas más pesadas y migrar a las réplicas solo esas.

El principal riesgo de separar lectura y escritura es la latencia de las réplicas: inmediatamente después de una escritura la réplica puede no contener todavía los nuevos datos, y el usuario no verá lo que acaba de guardar. Deja en el primario las consultas que leen datos recién escritos.

MySQL Router

MySQL Router — enrutador ligero de Oracle, parte del ecosistema MySQL InnoDB Cluster e InnoDB ClusterSet. Obtiene información sobre la composición del clúster desde los metadatos y cambia automáticamente la aplicación al nuevo primario tras un fallo. No tiene reglas de consulta como ProxySQL: lectura y escritura normalmente se separan por puertos distintos, y la aplicación elige a cuál conectarse. Router es apropiado si el clúster ya está construido con las herramientas de Oracle (MySQL Shell, Group Replication).

MaxScale

MaxScale — proxy de MariaDB con separación de lectura y escritura, filtros de consultas y conmutación automática. Un detalle importante — la licencia: no es software abierto, sino Business Source License 1.1. Para la versión 24.08 el uso gratuito está permitido si en producción hay en total menos de tres servidores de bases de datos; tras el plazo acordado (para 24.08 — 09.09.2027) el código pasará a GPL. Para una instalación mayor se necesita una suscripción comercial de MariaDB.

Qué elegir

SituaciónElección
Servidor primario y réplicas MySQL o MariaDB, se necesita pool y reglas flexiblesProxySQL
Clúster MySQL InnoDB Cluster de OracleMySQL Router
Infraestructura en MariaDB con suscripciónMaxScale
Un único servidor sin réplicasno se necesita proxy: basta con configurar un pool de conexiones en la aplicación

El proxy en sí se convierte en un punto de fallo, por eso en producción se despliega como mínimo en dos instancias — por ejemplo, junto a cada servidor de la aplicación o en pareja detrás de una dirección compartida.

Errores típicos

  • Todos los SELECT a las réplicas sin tener en cuenta la latencia. El usuario guarda datos y no los ve al actualizar la página.
  • Una única instancia del proxy. El fallo del proxy detiene la aplicación igual que el fallo de la base.
  • La interfaz administrativa accesible desde el exterior. Se cierra su puerto en el firewall y se cambian las credenciales por defecto.
  • Cambios solo en runtime. Sin SAVE … TO DISK la configuración se perderá tras un reinicio.

Enlaces útiles

// Tarea parecida

Si estas resolviendo algo parecido

Este articulo pertenece a uno de los temas principales de trabajo. Puedes seguir leyendo sobre el tema, ir a la pagina principal para entender a que me dedico o abrir directamente los servicios.

Tema del articulo

Servidores e infraestructura

VPS, Linux, stack web, migraciones, hosting, bases de datos y operacion base.

Tareas frecuentes de esta tema

  • Migrar un sitio o servicio a un nuevo servidor
  • Configurar Linux, Nginx, base de datos y copias de seguridad
  • Entender por que el sistema funciona de forma inestable

// Siguiente paso

Si necesitas ayuda con este tema y no solo otro articulo, es mejor ir directo a la pagina del servicio. La pagina principal y la seleccion de materiales quedan como rutas secundarias.

Abrir servicios

// Contact

¿Necesitas ayuda?

Escríbeme y te ayudaré a resolver el problema

Respondo en un día laborable (03:00-13:00 GMT)

Или оставьте заявку здесь:

Confirme que no es un bot.

Escribir y recibir una respuesta rápida