MySQL Native Driver 插件 API 是 MySQL Native Driver 或 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(该 API 内置于 MySQL Native Driver,mysqlnd
中)。插件可以对 PHP 应用程序完全透明。不需要更改应用程序,因为插件在不同的层中运行。mysqlnd
插件可以认为是在 mysqlnd
下方的一层中运行。
以下列表表示 mysqlnd
插件的一些可能的应用程序。
负载平衡
读写分离。例如,PECL/mysqlnd_ms(主从)扩展。此扩展为复制设置拆分读写查询。
故障转移
循环轮询,负载最低
监控
查询日志记录
查询分析
查询审计。例如,PECL/mysqlnd_sip(SQL 注入防护)扩展。此扩展检查查询,并仅执行根据规则集允许的查询。
性能
缓存。例如,PECL/mysqlnd_qc(查询缓存)扩展。
限流
分片。例如,PECL/mysqlnd_mc(多连接)扩展。此扩展将尝试使用 SELECT ... LIMIT part_1、SELECT LIMIT part_n 将 SELECT 语句拆分为 n 部分。它将查询发送到不同的 MySQL 服务器,并在客户端合并结果。
可用的 MySQL Native Driver 插件
已经有一些 mysqlnd 插件可用。其中包括
PECL/mysqlnd_mc - 多连接插件。
PECL/mysqlnd_ms - 主从插件。
PECL/mysqlnd_qc - 查询缓存插件。
PECL/mysqlnd_pscache - 预准备语句句柄缓存插件。
PECL/mysqlnd_sip - SQL 注入防护插件。
PECL/mysqlnd_uh - 用户处理程序插件。