Флаг: English English

MySQL Proxy: Посредник для Базы Данных 🛠️

Опубликовано 28.10.2025

MySQL Proxy — это приложение-посредник, которое находится между клиентскими приложениями (например, вашим веб-сервером) и одним или несколькими серверами MySQL. Оно использует сетевой протокол MySQL (MySQL Network Protocol), что позволяет любому стандартному MySQL-совместимому клиенту подключаться к прокси без изменений, считая, что он общается напрямую с сервером MySQL.


Как Работает MySQL Proxy

В своей базовой конфигурации прокси просто перенаправляет запросы от клиента к серверу MySQL и возвращает ответы обратно.
Однако ключевая особенность MySQL Proxy и его аналогов — мониторинг, анализ и модификация проходящего трафика:

  1. Перехват — клиентский запрос попадает в прокси.
  2. Анализ/Модификация — прокси разбирает SQL (например, определяет тип операции: SELECT, INSERT, UPDATE, DELETE) и может изменить запрос (добавить WHERE, LIMIT, логирование и т.д.).

    Оригинальный MySQL Proxy использовал Lua-скрипты для этой логики.

  3. Маршрутизация/Действие — на основе анализа:
    • Отправить на мастер (запись) или реплику (чтение).
    • Балансировать нагрузку (Round-Robin, least connections и др.).
    • Мультиплексировать соединения — тысячи клиентов → десятки бэкенд-соединений.
  4. Обработка ответа — модификация или анализ результата перед возвратом клиенту.

Всё это — без изменений в коде приложения и сервере MySQL.


Основные Функции и Задачи

КатегорияЗадачиПримеры применения
МасштабируемостьRead/Write Split, балансировка, шардингРаспределение нагрузки в кластере
ДоступностьFailover, мониторинг состояния серверовАвтоматическое переключение при сбое
ОптимизацияКэширование, мультиплексирование, пулингСнижение нагрузки на БД
БезопасностьАудит, фильтрация, блокировка SQL-инъекцийЖурналирование, whitelist/blacklist
НаблюдаемостьСтатистика запросов, профилированиеПоиск медленных запросов

Типы MySQL Proxy

1. SQL-Aware Прокси (понимают SQL и протокол MySQL)

ПроксиРазработчикОсновные функцииМультиплексированиеКэширование результатовRead/Write SplitFailoverШардингАктивная поддержка
ProxySQLProxySQL TeamВысокая производительность, Query Rules, мониторинг, кэш✅ Да✅ Да✅ Да✅ Да❌ Нет✅ Да (активно)
MaxScaleMariaDBПлагиновая архитектура, мониторы, фильтры, аудит❌ Нет❌ Нет✅ Да✅ Да✅ Да (через плагины)✅ Да
MySQL RouterOracleПростота, интеграция с InnoDB Cluster❌ Нет❌ Нет✅ Да✅ Да❌ Нет✅ Да
Vitess (VTGate)YouTube / CNCFМасштабирование на тысячи шард, облако✅ Да✅ Да (ограниченно)✅ Да✅ Да✅ Да✅ Да

Примечание:

  • Мультиплексирование — только ProxySQL и Vitess.
  • Кэширование результатов SELECT — только ProxySQL и Vitess.
  • ШардингVitess и MaxScale (с плагинами).

2. TCP/Layer 4 Прокси (работают на уровне соединений)

ПроксиОписаниеОграничения
HAProxyВысокопроизводительный TCP/HTTP балансировщикНе анализирует SQL → read/write split только по портам/IP
KeepalivedОбеспечивает VIP (виртуальный IP) для HAНе прокси, а инструмент для отказоустойчивости самого прокси

Рекомендация: HAProxy часто используется в связке с SQL-aware прокси (например, HAProxy → несколько ProxySQL).


⚠️ Важно: Оригинальный MySQL Proxy (от Oracle)

Устарел и не поддерживается с 2014 года (последний релиз — 0.8.5).
Не рекомендуется к использованию в продакшене.
Все его функции (и намного больше) реализованы в современных альтернативах.

ℹ️ Oracle не развивает open-source MySQL Proxy.
В MySQL Enterprise есть MySQL Router, но он не заменяет полноценный SQL-aware прокси.


Пример: Простая конфигурация 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;

Как выбрать прокси?

ЗадачаРекомендацияПочему
Read/Write Split + кэш + мультиплексированиеProxySQLЛёгкий, быстрый, гибкие правила
MariaDB + плагины + шардингMaxScaleГлубокая интеграция с MariaDB
MySQL InnoDB Cluster / Group ReplicationMySQL RouterОфициальная поддержка Oracle
Масштабирование на 1000+ шард (облако)VitessКрупномасштабная архитектура
Простой балансер перед несколькими ProxySQLHAProxy + KeepalivedTCP-уровень + HA

Заключение

MySQL Proxy — мощный инструмент для масштабирования, отказоустойчивости и безопасности баз данных. Современные решения (ProxySQL, MaxScale, Vitess) полностью вытеснили устаревший оригинальный прокси от Oracle.

Выбирайте SQL-aware прокси, если нужна гибкость. TCP-прокси — только для простых сценариев или в связке.

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Похожие посты