什么是mysqlnd?
mysqldnd(MySQL native driver)是由PHP源碼提供的mysql驅(qū)動(dòng)連接代碼。它的目的是代替舊的libmysql驅(qū)動(dòng)。
傳統(tǒng)的安裝php的方式中,我們?cè)诰幾gPHP時(shí),一般指定以下幾項(xiàng):
--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ū)動(dòng), 這是比較老的驅(qū)動(dòng), PHP 5.3開始已經(jīng)不建議使用它了, 而建議使用mysqlnd。
PDO與mysqlnd, libmysql又是何種關(guān)系?
PDO是一個(gè)應(yīng)用層抽象類,底層和MySQL server連接交互需要MySQL驅(qū)動(dòng)的支持。也就是說無論你使用了何種驅(qū)動(dòng),都可以使用PDO。
PDO是提供了PHP應(yīng)用程序?qū)覣PI接口,而mysqlnd、libmysql則負(fù)責(zé)與MySQL server進(jìn)行網(wǎng)絡(luò)協(xié)議交互(它并不提供php應(yīng)用程序?qū)覣PI功能)。
為什么使用mysqlnd驅(qū)動(dòng)?
1. 傳統(tǒng)的PHP訪問MySQL數(shù)據(jù)庫,是通過MySQL數(shù)據(jù)庫的libmysql client庫,這個(gè)libmysql client是用C/C++編寫的,雖然一直以來PHP通過libmysql訪問數(shù)據(jù)庫性能也一直很好,但是卻無法利用PHP本身的很多特性。
mysqlnd提供了和Zend引擎高度的集成性,更加快速的執(zhí)行速度,更少的內(nèi)存消耗,利用了PHP的Stream API,以及客戶段緩存機(jī)制。由于mysqlnd是透過Zend引擎,因此提供更多高級(jí)特性,以及有效利用Zend進(jìn)行加速,原理圖如下:
從上圖可以看出來,libmysql是直接訪問數(shù)據(jù)庫的,而mysqlnd是通過Zend訪問數(shù)據(jù)庫。
2. libmysql驅(qū)動(dòng)是由MySQL AB公司(現(xiàn)在是oracle公司)編寫, 并按MySQL license許可協(xié)議發(fā)布,所以在PHP中默認(rèn)是被禁用的。而mysqlnd是由php官方開發(fā)的驅(qū)動(dòng),以php license許可協(xié)議發(fā)布,故就規(guī)避了許可協(xié)議和版權(quán)的問題
3. mysqlnd內(nèi)置于PHP源代碼,故你在編譯安裝php時(shí)就不需要預(yù)先安裝MySQL server也可以提供MySQL client API (mysql_connect、pdo、mysqli),這將減化一些工作量
4. 一些新的或增強(qiáng)的功能
怎么安裝mysqlnd驅(qū)動(dòng)?
編譯php時(shí),修改以下幾個(gè)項(xiàng)參數(shù)即可,提示: 如果使用mysqlnd,并不需要預(yù)先安裝mysql
--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
如果在phpinfo輸出的mysql項(xiàng)中發(fā)現(xiàn)client API Version : mysqlnd, 說明mysqlnd驅(qū)動(dòng)安裝成功.
聯(lián)系客服