什么是Mysqlnd (MySQL本機(jī)驅(qū)動)
Mysqlnd是由PHP源碼提供的mysql驅(qū)動連接代碼。它的目的是代替舊的libmysql驅(qū)動癣疟。
傳統(tǒng)的安裝php的方式中:
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql/bin/mysql_config \
這實(shí)際上就是使用了MySQL官方的libmysql驅(qū)動, 這是比較老的驅(qū)動, PHP 5.3開始已經(jīng)不建議使用它了, 而建議使用mysqlnd。
為什么用它蹂午?
mysqlnd 針對與PHP的應(yīng)用交互進(jìn)行優(yōu)化窑业,libmysqlclient是早期為C應(yīng)用程序設(shè)計(jì)的愿汰,并沒有針對性的優(yōu)化。
mysqlnd和Zend引擎高度的集成性乐纸,更加快速執(zhí)行速度衬廷,更少內(nèi)存消耗,利用了PHP的Stream API 進(jìn)行底層連接汽绢,以及客戶段緩存機(jī)制吗跋。由于mysqlnd是透過Zend引擎,因此提供更多高級特性宁昭,以及有效利用Zend進(jìn)行加速跌宛,原理圖如下:
- Mysqlnd 作為PHP項(xiàng)目的一部分開發(fā)的,根據(jù)PHP許可證發(fā)布的积仗。
- libmysql構(gòu)建MySQL數(shù)據(jù)庫擴(kuò)展疆拘。要在構(gòu)PHP源代碼的機(jī)器上安裝MySQL。Mysqlnd 不需要寂曹。
- 壓縮協(xié)議支持
- SSL支持
- 命名管道支持
- 非阻塞異步查詢
- 性能統(tǒng)計(jì)
- 加載本地文件方面的open_basedir的指令
- 使用PHP的本地內(nèi)存管理系統(tǒng)(例如哎迄,遵循PHP內(nèi)存限制)
- 用于MySQL復(fù)制的讀/寫分割 (with plugin)
- 負(fù)載均衡 (with plugin)
- 故障轉(zhuǎn)移 (with plugin)
- 懶連接 (with plugin)
- 查詢緩存 (with plugin)
- 透明查詢操作(例如,自動顯示或監(jiān)控) (with plugin)
......
安裝
5.3.0添加了Mysqlnd 驅(qū)動程序隆圆,支持所有MySQL擴(kuò)展(即mysql漱挚,mysqli和PDO)
5.4.0 Mysqlnd 是所有MySQL擴(kuò)展的默認(rèn)驅(qū)動
#推薦使用mysqlnd編譯
$ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd
Mysqlnd插件
在PHP應(yīng)用程序和MySQL服務(wù)器之間的層中運(yùn)行。
可以承擔(dān)典型的MySQL代理任務(wù)渺氧,如負(fù)載平衡棱烂,監(jiān)控和性能優(yōu)化。
是對mysqlnd的擴(kuò)展阶女。
使用C編寫的PHP擴(kuò)展颊糜,使PHP應(yīng)用程序100%透明。 mysqlnd插件可以被認(rèn)為是在mysqlnd下面的層中運(yùn)行的秃踩。
可用插件
mysqlnd_mc - 多連接插件衬鱼。
mysqlnd_ms - 主從插件。
mysqlnd_qc - 查詢緩存插件憔杨。
mysqlnd_pscache - 預(yù)處理句柄緩存插件鸟赫。
mysqlnd_sip - SQL注入保護(hù)插件。
mysqlnd_uh - 用戶處理程序插件消别。