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).