Plugin-API des MySQL Native Drivers

Inhaltsverzeichnis

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

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top