PHP 大会日本 2024

MySQL Native Driver 插件 API

目录

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

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top