MySQL Native Driver Plugin API
Table of Contents A comparison of mysqlnd plugins with MySQL Proxy
Obtaining the mysqlnd plugin API
MySQL Native Driver Plugin Architecture
The mysqlnd plugin API
Getting started building a mysqlnd plugin
The MySQL Native Driver Plugin API is a feature of MySQL Native
Driver, or mysqlnd. Mysqlnd
plugins operate in the layer between PHP applications and the MySQL
server. This is comparable to MySQL Proxy. MySQL Proxy operates on a
layer between any MySQL client application, for example, a PHP
application and, the MySQL server. Mysqlnd plugins
can undertake typical MySQL Proxy tasks such as load balancing,
monitoring and performance optimizations. Due to the different
architecture and location, mysqlnd plugins do not
have some of MySQL Proxy's disadvantages. For example, with plugins,
there is no single point of failure, no dedicated proxy server to
deploy, and no new programming language to learn (Lua).
A mysqlnd plugin can be thought of as an extension
to mysqlnd. Plugins can intercept the majority of
mysqlnd functions. The mysqlnd
functions are called by the PHP MySQL extensions such as
ext/mysql, ext/mysqli, and
PDO_MYSQL. As a result, it is possible for a
mysqlnd plugin to intercept all calls made to these
extensions from the client application.
Internal mysqlnd function calls can also be
intercepted, or replaced. There are no restrictions on manipulating
mysqlnd internal function tables. It is possible to
set things up so that when certain mysqlnd
functions are called by the extensions that use
mysqlnd, the call is directed to the appropriate
function in the mysqlnd plugin. The ability to
manipulate mysqlnd internal function tables in this
way allows maximum flexibility for plugins.
Mysqlnd plugins are in fact PHP Extensions, written
in C, that use the mysqlnd plugin API (which is
built into MySQL Native Driver, mysqlnd). Plugins
can be made 100% transparent to PHP applications. No application
changes are needed because plugins operate on a different layer. The
mysqlnd plugin can be thought of as operating in a
layer below mysqlnd.
The following list represents some possible applications of
mysqlnd plugins. Load Balancing Read/Write Splitting. An example of this is the PECL/mysqlnd_ms
(Master Slave) extension. This extension splits read/write queries
for a replication setup.
Failover
Round-Robin, least loaded
Monitoring Query Logging
Query Analysis
Query Auditing. An example of this is the PECL/mysqlnd_sip (SQL
Injection Protection) extension. This extension inspects queries
and executes only those that are allowed according to a ruleset.
Performance Caching. An example of this is the PECL/mysqlnd_qc (Query Cache)
extension.
Throttling
Sharding. An example of this is the PECL/mysqlnd_mc (Multi
Connect) extension. This extension will attempt to split a SELECT
statement into n-parts, using SELECT ... LIMIT part_1, SELECT
LIMIT part_n. It sends the queries to distinct MySQL servers and
merges the result at the client.
MySQL Native Driver Plugins Available
There are a number of mysqlnd plugins already available. These
include: PECL/mysqlnd_mc - Multi Connect
plugin.
PECL/mysqlnd_ms - Master Slave
plugin.
PECL/mysqlnd_qc - Query Cache
plugin.
PECL/mysqlnd_pscache - Prepared
Statement Handle Cache plugin.
PECL/mysqlnd_sip - SQL Injection
Protection plugin.
PECL/mysqlnd_uh - User Handler
plugin.