2024 年 PHP Conference Japan

MySQL 原生驅動程式插件 API

目錄

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/mysqlext/mysqliPDO_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 ... LIMIT part_1、SELECT LIMIT part_n 將 SELECT 陳述式分割成 n 個部分。它將查詢傳送到不同的 MySQL 伺服器,並在用戶端合併結果。

可用的 MySQL 原生驅動程式插件

目前已有許多 mysqlnd 插件可用,其中包括:

  • PECL/mysqlnd_mc - 多重連線插件。

  • PECL/mysqlnd_ms - 主從插件。

  • PECL/mysqlnd_qc - 查詢快取插件。

  • PECL/mysqlnd_pscache - 預備陳述式控制代碼快取插件。

  • PECL/mysqlnd_sip - SQL 注入保護插件。

  • PECL/mysqlnd_uh - 使用者處理程式插件。

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top