首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 原生驅動 mysqlnd:為 PHP 6 設計的版權無虞、高效能資料庫驅動(歷史回顧)

     編輯:MySQL 資料庫相關知識

背景:LAMP 架構與 PHP-Mysql 共生關係

LAMP(Linux + Apache + MySQL + PHP)曾是 Web 開發主流棧。PHP 預設支援 MySQL 極大推動了 MySQL 普及。MySQL 公司深知此點,長期與 PHP 核心團隊合作。

PHP 版本演進與驅動痛點

  • PHP 4:內建 MySQL 擴充,開箱即用。
  • PHP 5:因 libmysqlclient 採用 GPL 授權,與 PHP 許可證衝突,預設不再捆綁 MySQL 擴充。Windows 需手動複製 libmysql.dll、修改 php.ini,部署麻煩。
  • PHP 6(開發中後胎死腹中):計劃原生 Unicode、移除舊特性,需全新驅動。

mysqlnd 誕生:MySQL Native Driver for PHP

  • 授權:採用 PHP License(BSD 風格),徹底解決 GPL 版權疑慮,可直接內建 PHP 核心。
  • 架構:不依賴 libmysqlclient,直接實作 MySQL 協定,編譯安裝極簡化(--with-mysql=mysqlnd)。
  • 效能優化:
    • 優化持久連線(Persistent Connections)管理,減少連線建立開銷。
    • 記憶體管理整合 PHP 引擎,降低複製成本。
    • 支援非同步查詢、多重結果集等新特性。

技術細節

特性libmysqlclientmysqlnd
授權GPLPHP License
相依性外部共享庫無(編譯進 PHP)
Windows 部署需 dll + php.ini無需額外檔案
持久連線進程級共享PHP 進程內高效管理
記憶體使用雙重複製單一複製
統計資訊有限豐富(mysqli_get_client_stats())

後續發展:PHP 6 未發布,但 mysqlnd 成為 PHP 5.3+ 預設

  • PHP 5.3.0(2009)正式引入 mysqlnd,可選編譯。
  • PHP 5.4+(2012)預設使用 mysqlnd,mysql、mysqli、PDO_MySQL 全部可切換至 mysqlnd。
  • 現代 PHP(7.x/8.x)僅支援 mysqlnd,libmysqlclient 已不再維護相容。

給現代開發者的啟示

  1. 驅動授權相容性是基礎建設關鍵,影響部署合法性與普及度。
  2. 原生實作(零相依)帶來部署簡易性與效能優勢。
  3. 持久連線優化在高併發短連線場景(PHP-FPM)效果顯著。
  4. PHP 官方擴充現皆建立在 mysqlnd 之上,無需額外配置即享受優化。

歷史註記:PHP 6 因 Unicode 實作困難最終放棄,功能併入 PHP 5.4/7.0。mysqlnd 卻成為 PHP-MySQL 生態的基石,延續至今。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved