L'API du plugin du driver natif MySQL est une fonctionnalité
du driver natif MySQL, ou mysqlnd
.
Le plugin Mysqlnd
opère sur la couche entre
les applications PHP et le serveur MySQL. Il est comparable
à un proxy MySQL. Un proxy MySQL opère sur une couche entre toutes
les applications clientes MySQL, par exemple, une application PHP
et un serveur MySQL. Le plugin Mysqlnd
peut entreprendre des tâches typiques de proxy MySQL comme
l'équilibrage de charge, ainsi que le suivi et l'optimisation
des performances. En raison d'une architecture et d'une localisation
différente, le plugin mysqlnd
n'a pas tous les
inconvénients d'un proxy MySQL. Par exemple, avec le plugin, il
n'y a pas qu'un seul point d'échec, pas de serveur de proxy dédié
à déployer, et pas de nouveau langage à apprendre (Lua).
Un plugin mysqlnd
peut être exécuté comme une extension
à mysqlnd
. Un plugin peut intercepter la majorité des
fonctions mysqlnd
. Les fonctions mysqlnd
sont appelées par l'extension PHP MySQL comme
ext/mysql
, ext/mysqli
, et
PDO_MYSQL
. Comme résultat, il est possible pour un
plugin mysqlnd
d'intercepter tous les appels effectués
par ces extensions depuis une application cliente.
Les appels aux fonctions internes mysqlnd
peuvent
également être interceptés ou remplacés. Il n'y a aucune restriction
sur la manipulation des tables de fonctions internes mysqlnd
.
Il est possible de définir des actions pour faire que lorsque
certaines fonctions mysqlnd
sont appelées
par l'extension qui utilise mysqlnd
, l'appel
est redirigé vers la fonction appropriée du plugin
mysqlnd
. La possibilité de manipuler les tables
de fonctions internes mysqlnd
dans ce sens permet
un maximum de flexibilité.
Le plugin Mysqlnd
est en faite, une extension PHP,
écrit en C, qui utilise l'API du plugin mysqlnd
(qui est compilé dans le driver natif MySQL, mysqlnd
).
Le plugin peut être à 100% transparent pour les applications PHP. Aucune
modification aux applications n'est nécessaire car le plugin opère
sur une couche différente. Le plugin mysqlnd
peut être utilisé dans une couche en dessous de mysqlnd
.
La liste suivante représente quelques applications possibles
du plugin mysqlnd
.
L'équilibrage de charge.
Séparation des lectures et des écritures. Un exemple de cette fonctionnalité est l'extension PECL/mysqlnd_ms (Maître/esclave). Cette extension sépare les requêtes de lecture et d'écriture pour une configuration de réplication.
Basculement
Round-Robin, le moins chargé
Surveillance
Journalisation des requêtes
Analyse de requêtes
Audite de requêtes. Un exemple de ceci est l'extension PECL/mysqlnd_sip (SQL Injection Protection). Cette extension inspecte les requêtes et exécute uniquement celles qui sont autorisées suivants des ensembles de règles.
Performance
La mise en cache. Un exemple de ceci est l'extension PECL/mysqlnd_qc (Query Cache).
Étranglement
Fragmentation. Un exemple de ceci est l'extension PECL/mysqlnd_mc (Multi Connect). Cette extension tente de séparer une requête SELECT en n parties, en utilisant des requêtes du type SELECT ... LIMIT part_1, SELECT LIMIT part_n. L'extension envoie les requêtes à des serveurs MySQL distincts et fusionne ensuite le résultat à destination du client.
PLugins du driver natif MySQL disponibles
Il y a déjà plusieurs plugins mysqlnd de disponible.
PECL/mysqlnd_mc -Plugin Multi Connexion.
PECL/mysqlnd_ms - Plugin Maître Esclave.
PECL/mysqlnd_qc - Plugin de mise en cache de requêtes.
PECL/mysqlnd_pscache - Plugin de mise en cache de gestionnaire de requêtes préparées.
PECL/mysqlnd_sip - Plugin permettant la protection contre les injections SQL.
PECL/mysqlnd_uh - Plugin de gestionnaire d'utilisateurs.