API для плагинов к встроенному драйверу MySQL является особенностью встроенного драйвера MySQL (mysqlnd). Плагины mysqlnd работают на уровне между PHP-приложениями и сервером MySQL. Это похоже на работу MySQL Proxy. Плагины mysqlnd могут реализовывать стандартные задачи MySQL Proxy, такие как балансирование нагрузки, мониторинг и оптимизация быстродействия. При этом, вследствие другой архитектуры и месторасположения, плагины mysqlnd не имеют некоторых недочетов MySQL Proxy. Например, нет единой точки точки отказа, не требуется установка отдельного proxy-сервера и нет необходимости в изучении нового языка программирования Lua.
Плагин mysqlnd можно рассматривать как расширение mysqlnd. Плагины могут перехватывать большую часть функций mysqlnd. Эти функции вызываются расширениями PHP, такими как ext/mysql, ext/mysqli и PDO_MYSQL. В конечном счете, плагины mysqlnd могут перехватывать все запросы, сделанные этими расширениями из клиентского приложения.
Внутренние вызовы функций mysqlnd также могут быть перехвачены или заменены. Ограничения по работе с внутренней таблицей функций mysqlnd отсутствуют. Возможно настроить все таким образом, что при вызове определенных функций mysqlnd из расширений, использующих mysqlnd, этот вызов будет перенаправляться в соответствующую функцию плагина mysqlnd. Возможность манипулировать внутренней таблицей функций mysqlnd дает плагинам максимум гибкости.
Плагины mysqlnd фактически являются расширениями PHP, написанными на C и использующими API для плагинов mysqlnd (встроенном в драйвер mysqlnd). Плагины могут быть полностью прозрачными для PHP-приложений. Изменять приложение не потребуется, поскольку плагины работают на другом уровне. Плагины mysqlnd можно рассматривать как работающие на уровень ниже mysqlnd.
Нижеуказанный список показывает несколько возможных вариантов плагинов mysqlnd.
Балансировка нагрузки
Разделение чтения и записи. Примером является расширение PECL/mysqlnd_ms (Master Slave). Это расширение разделяет запросы на чтение и запись для настройки репликации.
Отказоустойчивость
Равномерная загрузка, запросы на наименее загруженный сервер
Мониторинг
Логирование запросов
Анализ запросов
Аудит запросов. Примером является расширение 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
Существует несколько уже доступных плагинов mysqlnd. Список включает:
PECL/mysqlnd_mc - Multi Connect plugin.
PECL/mysqlnd_ms - Master Slave plugin.
PECL/mysqlnd_qc - Query Cache (кеширование запросов) plugin.
PECL/mysqlnd_pscache - Prepared Statement Handle Cache plugin (обработка кеширования подготовленных запросов)
PECL/mysqlnd_sip - SQL Injection Protection plugin (защита от SQL-инъекций)
PECL/mysqlnd_uh - User Handler plugin (обработка пользователей)