Die Plugin-API des MySQL Native Drivers ist eine Komponente des MySQL Native
Drivers, oder kurz mysqlnd
. Die
mysqlnd
-Plugins arbeiten in der Schicht zwischen der
PHP-Anwendung und dem MySQL-Server. Dies ist vergleichbar mit dem
MySQL-Proxy. Der MySQL-Proxy arbeitet in einer Schicht zwischen einer
beliebigen MySQL-Client-Anwendung, zum Beispiel einer PHP-Anwendung, und dem
MySQL-Server. Mysqlnd
-Plugins können typische
MySQL-Proxy-Aufgaben wie Lastausgleich, Überwachung und Leistungsoptimierung
übernehmen. Aufgrund der unterschiedlichen Architektur und des Standorts
haben mysqlnd
-Plugins einige der Nachteile von
MySQL-Proxy nicht. So gibt es bei Plugins beispielsweise keinen Single Point
of Failure (einzelnen Ausfallpunkt), keinen dedizierten Proxy-Server, der
eingesetzt werden muss, und keine neue Programmiersprache, die erlernt
werden muss (Lua).
Ein mysqlnd
-Plugin kann als eine Erweiterung von
mysqlnd
betrachtet werden. Die Plugins können die meisten
der mysqlnd
-Funktionen abfangen. Diese Funktionen werden
von den PHP-MySQL-Erweiterungen wie ext/mysql
,
ext/mysqli
und PDO_MYSQL
aufgerufen.
Daher ist es für ein mysqlnd
-Plugin möglich, alle von
einer Client-Anwendung an diese Erweiterungen gerichteten Aufrufe
abzufangen.
Auch Aufrufe von internen mysqlnd
-Funktionen können
abgefangen oder ersetzt werden. Es gibt keine Einschränkungen für die
Bearbeitung von mysqlnd
-internen Funktionstabellen. Es
ist also möglich, das Ganze so zu konfigurieren, dass der Aufruf bestimmter
mysqlnd
-Funktionen durch eine Erweiterung, die
mysqlnd
verwendet, an die entsprechende Funktion im
mysqlnd
-Plugin geleitet wird. Die Möglichkeit, die
internen Funktionstabellen von mysqlnd
auf diese Weise zu
manipulieren, bietet maximale Flexibilität für Plugins.
Ein mysqlnd
-Plugin ist im Grunde eine PHP-Erweiterung,
die in C geschrieben ist und die Plugin-API von mysqlnd
verwendet (die in den MySQL Native Driver mysqlnd
integriert ist). Plugins können für PHP-Anwendungen 100% transparent gemacht
werden. Es sind keine Änderungen an den Anwendungen erforderlich, da Plugins
in einer anderen Schicht arbeiten. Das mysqlnd
-Plugin
kann man sich als eine Schicht unterhalb von mysqlnd
vorstellen.
Die folgende Liste enthält ein paar mögliche Anwendungen für
mysqlnd
-Plugins.
Load Balancing (Lastverteilung)
Trennung von Lese- und Schreibvorgängen. Ein Beispiel hierfür ist die Erweiterung PECL/mysqlnd_ms (Master Slave). Diese Erweiterung trennt Lese- und Schreibanfragen für eine Replikationskonfiguration.
Ausfallsicherung
Round-Robin, Übertragung auf den am wenigsten belasteten Server
Server-Überwachung
Abfrage-Protokollierung
Abfrage-Analyse
Abfrage-Überprüfung. Ein Beispiel hierfür ist die Erweiterung PECL/mysqlnd_sip (SQL Injection Protection). Diese Erweiterung prüft Abfragen und führt nur solche aus, die einem bestimmten Regelwerk entsprechen.
Leistung
Zwischenspeicherung. Ein Beispiel hierfür ist die Erweiterung PECL/mysqlnd_qc (Query Cache).
Drosselung
Sharding (Aufteilung). Ein Beispiel hierfür ist die Erweiterung PECL/mysqlnd_mc (Multi Connect). Diese Erweiterung versucht, eine SELECT-Anweisung in n Teile aufzuteilen, indem sie SELECT ... LIMIT part_1, SELECT LIMIT part_n verwendet. Sie sendet die Abfragen an verschiedene MySQL-Server und führt das Ergebnis auf dem Client zusammen.
Verfügbare Plugins für den MySQL Native Driver
Es gibt bereits eine Reihe von mysqlnd-Plugins. Dazu gehören:
PECL/mysqlnd_mc - Plugin für Mehrfachverbindungen (Multi Connect). plugin.
PECL/mysqlnd_ms - Plugin für die Master-Slave-Konfiguration.
PECL/mysqlnd_qc - Plugin für die Zwischenspeicherung von Abfragen (Query Cache). plugin.
PECL/mysqlnd_pscache - Plugin für die Zwischenspeicherung von Handles für vorbereitete Anweisungen (Prepared Statement Handle Cache).
PECL/mysqlnd_sip - Plug-in zum Schutz vor SQL-Injections.
PECL/mysqlnd_uh - Plugin für die Benutzerverwaltung (User Handler).