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 - 用户处理程序插件。