MySQL 本机驱动插件 API 是 MySQL 本机驱动程序,或 mysqlnd
的一项功能。 Mysqlnd
插件在 PHP 应用程序和 MySQL 服务器之间的层中运行。这与 MySQL Proxy 相似。MySQL Proxy 在任何 MySQL 客户端应用程序(例如 PHP 应用程序)和 MySQL 服务器之间的一层上运行。 Mysqlnd
插件可以执行典型的 MySQL Proxy 任务,例如负载平衡、监控和性能优化。由于架构和位置不同,mysqlnd
插件不具有 MySQL Proxy 的一些缺点。例如,使用插件,没有单点故障,没有专用的代理服务器要部署,也不需要学习新的编程语言(Lua)。
可以将 mysqlnd
插件视为 mysqlnd
的扩展。插件可以拦截大多数 mysqlnd
函数。 mysqlnd
函数由 PHP MySQL 扩展调用,例如 ext/mysql
、ext/mysqli
和 PDO_MYSQL
。因此,mysqlnd
插件可以拦截来自客户端应用程序对这些扩展的所有调用。
也可以拦截或替换内部 mysqlnd
函数调用。对操作 mysqlnd
内部函数表没有限制。可以设置使其能够在使用 mysqlnd
的扩展调用某些 mysqlnd
函数时,将调用定向到 mysqlnd
插件中的相应函数。能够以这种方式操作 mysqlnd
内部函数表,可以为插件提供最大的灵活性。
Mysqlnd
插件实际上是用 C 编写的 PHP 扩展,它们使用 mysqlnd
插件 API(它内置在 MySQL 本机驱动程序 mysqlnd
中)。插件可以对 PHP 应用程序完全透明。不需要进行任何应用程序更改,因为插件在不同的层上运行。可以将 mysqlnd
插件视为在 mysqlnd
下方的一层运行。
以下列表代表了 mysqlnd
插件的一些可能的应用。
负载平衡
读/写分离。一个例子是 PECL/mysqlnd_ms(主从)扩展。此扩展为复制设置拆分读/写查询。
故障转移
循环、负载最低
监控
查询日志记录
查询分析
查询审计。一个例子是 PECL/mysqlnd_sip(SQL 注入保护)扩展。此扩展检查查询,只执行根据规则集允许的查询。
性能
缓存。一个例子是 PECL/mysqlnd_qc(查询缓存)扩展。
节流
分片。一个例子是 PECL/mysqlnd_mc(多连接)扩展。此扩展将尝试将 SELECT 语句拆分为 n 部分,使用 SELECT ... LIMIT part_1、SELECT LIMIT part_n。它将查询发送到不同的 MySQL 服务器,并在客户端合并结果。
可用的 MySQL 本机驱动程序插件
已经提供了一些 mysqlnd 插件。这些包括
PECL/mysqlnd_mc - 多连接插件。
PECL/mysqlnd_ms - 主从插件。
PECL/mysqlnd_qc - 查询缓存插件。
PECL/mysqlnd_pscache - 预准备语句句柄缓存插件。
PECL/mysqlnd_sip - SQL 注入保护插件。
PECL/mysqlnd_uh - 用户处理程序插件。