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 ... 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 - 使用者處理程式插件。