<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.mysqlnd.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'mysqlnd.plugin.php',
    1 => 'Plugin-API des MySQL Native Drivers',
    2 => 'Plugin-API des MySQL Native Drivers',
  ),
  'up' => 
  array (
    0 => 'book.mysqlnd.php',
    1 => 'Mysqlnd',
  ),
  'prev' => 
  array (
    0 => 'mysqlnd.memory.php',
    1 => 'Speicherverwaltung',
  ),
  'next' => 
  array (
    0 => 'mysqlnd.plugin.mysql-proxy.php',
    1 => 'Vergleich der mysqlnd-Plugins mit dem MySQL-Proxy',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'reference/mysqlnd/plugin.xml',
  ),
  'history' => 
  array (
  ),
  'extra_header_links' => 
  array (
    'rel' => 'alternate',
    'href' => '/manual/en/feeds/mysqlnd.plugin.atom',
    'type' => 'application/atom+xml',
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqlnd.plugin" class="chapter">
 <h1 class="title">Plugin-API des MySQL Native Drivers</h1>
<h2>Inhaltsverzeichnis</h2><ul class="chunklist chunklist_chapter"><li><a href="mysqlnd.plugin.mysql-proxy.php">Vergleich der mysqlnd-Plugins mit dem MySQL-Proxy</a></li><li><a href="mysqlnd.plugin.obtaining.php">Bezugsquellen f&uuml;r die mysqlnd-Plugin-API</a></li><li><a href="mysqlnd.plugin.architecture.php">Plugin-Architektur des MySQL Native Drivers</a></li><li><a href="mysqlnd.plugin.api.php">Die Plugin-API von mysqlnd</a></li><li><a href="mysqlnd.plugin.developing.php">Einf&uuml;hrung in die Erstellung eines mysqlnd-Plugins</a></li></ul>

 <p class="simpara">
  Die Plugin-API des MySQL Native Drivers ist eine Komponente des MySQL Native
  Drivers, oder kurz <code class="literal">mysqlnd</code>. Die
  <code class="literal">mysqlnd</code>-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. <code class="literal">Mysqlnd</code>-Plugins können typische
  MySQL-Proxy-Aufgaben wie Lastausgleich, Überwachung und Leistungsoptimierung
  übernehmen. Aufgrund der unterschiedlichen Architektur und des Standorts
  haben <code class="literal">mysqlnd</code>-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).
 </p>
 <p class="simpara">
  Ein <code class="literal">mysqlnd</code>-Plugin kann als eine Erweiterung von
  <code class="literal">mysqlnd</code> betrachtet werden. Die Plugins können die meisten
  der <code class="literal">mysqlnd</code>-Funktionen abfangen. Diese Funktionen werden
  von den PHP-MySQL-Erweiterungen wie <code class="literal">ext/mysql</code>,
  <code class="literal">ext/mysqli</code> und <code class="literal">PDO_MYSQL</code> aufgerufen.
  Daher ist es für ein <code class="literal">mysqlnd</code>-Plugin möglich, alle von
  einer Client-Anwendung an diese Erweiterungen gerichteten Aufrufe
  abzufangen.
 </p>
 <p class="simpara">
  Auch Aufrufe von internen <code class="literal">mysqlnd</code>-Funktionen können
  abgefangen oder ersetzt werden. Es gibt keine Einschränkungen für die
  Bearbeitung von <code class="literal">mysqlnd</code>-internen Funktionstabellen. Es
  ist also möglich, das Ganze so zu konfigurieren, dass der Aufruf bestimmter
  <code class="literal">mysqlnd</code>-Funktionen durch eine Erweiterung, die
  <code class="literal">mysqlnd</code> verwendet, an die entsprechende Funktion im
  <code class="literal">mysqlnd</code>-Plugin geleitet wird. Die Möglichkeit, die
  internen Funktionstabellen von <code class="literal">mysqlnd</code> auf diese Weise zu
  manipulieren, bietet maximale Flexibilität für Plugins.
 </p>
 <p class="simpara">
  Ein <code class="literal">mysqlnd</code>-Plugin ist im Grunde eine PHP-Erweiterung,
  die in C geschrieben ist und die Plugin-API von <code class="literal">mysqlnd</code>
  verwendet (die in den MySQL Native Driver <code class="literal">mysqlnd</code>
  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 <code class="literal">mysqlnd</code>-Plugin
  kann man sich als eine Schicht unterhalb von <code class="literal">mysqlnd</code>
  vorstellen.
 </p>
 <p class="simpara">
  Die folgende Liste enthält ein paar mögliche Anwendungen für
  <code class="literal">mysqlnd</code>-Plugins.
 </p>
 <ul class="itemizedlist">
  <li class="listitem">
   <span class="simpara">
    Load Balancing (Lastverteilung)
   </span>
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      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.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Ausfallsicherung
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Round-Robin, Übertragung auf den am wenigsten belasteten Server
     </span>
    </li>
   </ul>
  </li>
  <li class="listitem">
   <span class="simpara">
    Server-Überwachung
   </span>
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      Abfrage-Protokollierung
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Abfrage-Analyse
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      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.
     </span>
    </li>
   </ul>
  </li>
  <li class="listitem">
   <span class="simpara">
    Leistung
   </span>
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      Zwischenspeicherung. Ein Beispiel hierfür ist die Erweiterung
      PECL/mysqlnd_qc (Query Cache).
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Drosselung
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      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.
     </span>
    </li>
   </ul>
  </li>
 </ul>
 <p class="simpara">
  <strong>Verfügbare Plugins für den MySQL Native Driver</strong>
 </p>
 <p class="simpara">
  Es gibt bereits eine Reihe von mysqlnd-Plugins. Dazu gehören:
 </p>
 <ul class="itemizedlist">
  <li class="listitem">
   <span class="simpara">
    <strong>PECL/mysqlnd_mc</strong> - Plugin für
    Mehrfachverbindungen (Multi Connect).
    plugin.
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    <strong>PECL/mysqlnd_ms</strong> - Plugin für die
    Master-Slave-Konfiguration.
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    <strong>PECL/mysqlnd_qc</strong> - Plugin für die
    Zwischenspeicherung von Abfragen (Query Cache).
    plugin.
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    <strong>PECL/mysqlnd_pscache</strong> - Plugin für die
    Zwischenspeicherung von Handles für vorbereitete Anweisungen (Prepared
    Statement Handle Cache).
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    <strong>PECL/mysqlnd_sip</strong> - Plug-in zum Schutz vor
    SQL-Injections.
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    <strong>PECL/mysqlnd_uh</strong> - Plugin für die
    Benutzerverwaltung (User Handler).
   </span>
  </li>
 </ul>
 
 
 
 
 
</div>
<?php manual_footer($setup); ?>