Dutch PHP Conference 2026 - Call For Papers

API интеграции плагинов в драйвер MySQL Native Driver

Содержание

Драйвер MySQL Native Driver, или mysqlnd, предоставляет API, через который плагины встраиваются в драйвер. Плагины драйвера mysqlnd работают на уровне между PHP-приложениями и MySQL-сервером, аналогично приложению MySQL Proxy, которое также работает между клиентскими приложениями и сервером MySQL. Плагины драйвера mysqlnd выполняют типовые задачи MySQL Proxy наподобие балансировки нагрузки, мониторинга и оптимизации быстродействия. Из-за другой архитектуры и места обработки запросов плагины драйвера mysqlnd не содержат недочётов MySQL Proxy наподобие единой точки отказа, не требуют установки отдельного прокси-сервера и изучения нового языка программирования Lua.

Плагин mysqlnd расширяет функции драйвера mysqlnd. Плагин умеет перехватывать вызовы функций драйвера mysqlnd из MySQL-модулей PHP наподобие ext/mysql, ext/mysqli и PDO_MYSQL. Поэтому плагинам драйвера mysqlnd доступен перехват каждого запроса, который модули выполнили из клиентского приложения.

Плагины умеют перехватывать или подменять вызовы внутренних функций драйвера mysqlnd. API не ограничивает модификацию таблиц внутренних функций драйвера mysqlnd и разрешает перенаправлять вызовы конкретных функций драйвера mysqlnd из mysqlnd-модулей на функции mysqlnd-плагина. Управление таблицей внутренних функций драйвера mysqlnd даёт плагинам максимум гибкости.

Плагины драйвера mysqlnd — фактически PHP-модули на языке C, которые работают через API интеграции mysqlnd-плагинов в PHP-драйвер MySQL Native Driver, или mysqlnd. Плагины на 100 % прозрачны для PHP-приложений. Приложение не требуется изменять, поскольку плагины работают на другом уровне. С точки зрения поведения, mysqlnd-плагин работает на уровень ниже mysqlnd-драйвера, поскольку переопределяет поведение драйвера.

Следующий список приводит примеры практических задач, которые решают посредством плагинов драйвера mysqlnd.

  • Балансировка нагрузки

    • Разделение чтения и записи. Пример — модуль PECL/mysqlnd_ms (Master Slave). Модуль разделяет запросы на чтение и запись для настройки репликации.

    • Отказоустойчивость

    • Циклическое распределение запросов по принципу Round-Robin для равномерной нагрузки, распределение на наименее загруженный сервер

  • Мониторинг

    • Логирование запросов

    • Анализ запросов

    • Аудит запросов. Пример — модуль PECL/mysqlnd_sip (SQL Injection Protection, защита от SQL-инъекций). Модуль инспектирует запросы и выполняет только те, которые соответствуют набору правил.

  • Производительность.

    • Кеширование. Пример — модуль PECL/mysqlnd_qc (Query Cache, кеширование запросов).

    • Ограничение числа запросов

    • Шардирование. Пример — модуль PECL/mysqlnd_mc (Multi Connect). Модуль пытается разбить запрос SELECT на n частей через SELECT ... LIMIT part_1, SELECT LIMIT part_n. Модуль отправляет запросы на отдельные MySQL-серверы и объединяет результаты на клиенте.

Доступные плагины драйвера MySQL Native Driver

Репозитории PECL уже содержит ряд mysqlnd-плагинов, включая следующие:

  • mysqlnd_mc — Multi Connect, разбивка запросов по шардам.

  • mysqlnd_ms — Master Slave, разделение запросов на чтение и запросов на запись.

  • mysqlnd_qc — Query Cache, кеширование результатов запросов.

  • mysqlnd_pscache — Prepared Statement Handle Cache, обработка кеширования подготовленных запросов.

  • mysqlnd_sip — SQL Injection Protection, защита от SQL-инъекций.

  • mysqlnd_uh — User Handler, обработка пользователей.

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top