什麼是mysqlnd?
mysqldnd(mysql
傳統的安裝php的方式中,我們在編譯php時,一般指定以下幾項:
--with-mysql=/usr/local/mysql \這實際上就是使用了mysql官方自帶的libmysql驅動, 這是比較老的驅動, php 5.3開始已經不建議使用它了, 而建議使用mysqlnd。--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql/bin/mysql_config \
pdo與mysqlnd, libmysql又是何種關係?
pdo是乙個應用層抽象類,底層和mysql server連線互動需要mysql驅動的支援。也就是說無論你使用了何種驅動,都可以使用pdo。
pdo是提供了php應用程式層api介面,而mysqlnd、libmysql則負責與mysql server進行網路協議互動(它並不提供php應用程式層api功能)。
為什麼使用mysqlnd驅動?
1. 傳統的php訪問mysql資料庫,是通過mysql資料庫的libmysql client庫,這個libmysql client是用c/c++編寫的,雖然一直以來php通過libmysql訪問資料庫效能也一直很好,但是卻無法利用php本身的很多特性。
mysqlnd提供了和zend引擎高度的整合性,更加快速的執行速度,更少的記憶體消耗,利用了php的stream api,以及客戶段快取機制。由於mysqlnd是透過zend引擎,因此提供更多高階特性,以及有效利用zend進行加速,原理圖如下:
從上圖可以看出來,libmysql是直接訪問資料庫的,而mysqlnd是通過zend訪問資料庫。
2. libmysql驅動是由mysql ab公司(現在是oracle公司)編寫, 並按mysql license許可協議發布,所以在php中預設是被禁用的。而mysqlnd是由php官方開發的驅動,以php license許可協議發布,故就規避了許可協議和版權的問題
3. mysqlnd內置於php源**,故你在編譯安裝php時就不需要預先安裝mysql server也可以提供mysql client api (mysql_connect、pdo、mysqli),這將減化一些工作量
4. 一些新的或增強的功能
怎麼安裝mysqlnd驅動?
--with-mysql=mysqlnd \《lnmp、lamp、lanmp一鍵安裝包》中使用mysqlnd驅動php完整編譯引數:--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
註解:--with-mysql=dir include mysql support. dir is the mysql base
directory, if no dir is passed or the value is
mysqlnd the mysql native driver will be used
--with-pdo-mysql=dir pdo: mysql support. dir is the mysql base directory
if no value or mysqlnd is passed as dir, the
mysql native driver will be used
--with-mysqli=file include mysqli support. file is the path
to mysql_config. if no value or mysqlnd is passed
as file, the mysql native driver will be used
如果在phpinfo輸出的mysql項中發現client api version : mysqlnd, 說明mysqlnd驅動安裝成功.
'./configure''--prefix=/usr/local/php''--with-config-file-path=/usr/local/php/etc'\'--with-fpm-user=www''--with-fpm-group=www''--enable-fpm''--enable-opcache'\
'--with-mysql=mysqlnd''--with-mysqli=mysqlnd''--with-pdo-mysql=mysqlnd'\
'--disable-fileinfo''--with-iconv-dir=/usr/local''--with-freetype-dir''--with-jpeg-dir'\
'--with-png-dir''--with-zlib''--with-libxml-dir=/usr''--enable-xml''--disable-rpath'\
'--enable-bcmath''--enable-shmop''--enable-exif''--enable-sysvsem''--enable-inline-optimization'\
'--with-curl''--enable-mbregex''--enable-mbstring''--with-mcrypt''--with-gd'\
'--enable-gd-native-ttf''--with-openssl''--with-mhash''--enable-pcntl''--enable-sockets'\
'--with-xmlrpc''--enable-ftp''--with-gettext''--enable-zip''--enable-soap''--disable-ipv6'\
'--disable-debug
PHP 5 3以上版本推薦使用mysqlnd驅動
什麼是mysqlnd?mysqldnd mysql 傳統的安裝php的方式中,我們在編譯php時,一般指定以下幾項 with mysql usr local mysql with mysqli usr local mysql bin mysql config with pdo mysql usr l...
php5 3使用手冊,php5 3 注意事項說明
php5.3 新特性1.支援命名空間 namespace 5.3以前 class zend db table select 表示當前這個類檔案位於zend db table下 5.3namespace zend db table class select 2.支援延遲靜態繫結5.3以前 class ...
php5 3使用手冊,php5 3 注意事項說明
本篇文章是對php5.3中需要注意的一些事項進行了詳細的分析介紹,需要的朋友參考下 php5.3 新特性1.支援命名空間 namespace 5.3以前 class zend db table select 表示當前這個類檔案位於zend db table下 5.3namespace zend db...