PHP 5.3.0以上推荐使用mysqlnd驱动
1. 什么是 mysqlnd 驱动 ?
PHP 手册上的描述 :
MySQL Native Driver is a replacement for the MySQL Client Library (libmysql).
MySQL Native Driver is part of the official PHP sources as of PHP 5.3.0.
mysqldnd 即 mysql native driver 简写 , 即是由 PHP 源码提供的 mysql 驱动连接代码 . 它的目的是代替旧的 libmysql 驱动 .
传统的安装 php 的方式中 , 我们在编译 PHP 时 , 一般需要指定以下几项 : --with-mysql=/usr/local/mysql
--with-pdo-mysql=/usr/local/mysql
这实际上就是使用了 mysql 官方自带的 libmysql 驱动 , 这是比较老的驱动 , PHP 5.3 开始已经不建议使用它了 , 而建议使用 mysqlnd.
2. PDO 与 mysqlnd, libmysql 又是何种关系 ? PDO 是一个应用层抽象类 , 底层和 mysql server 连接交互需要 mysql 驱动的支持 . 也就是说无论你使用了何种驱动 , 都可以使用 PDO. PDO 是提供了 PHP 应用程序层 API 接口 , 而 mysqlnd, libmysql 则负责与 mysql server 进行网络协议交互 ( 它并不提供 php 应用程序层 API 功能 )
3. 为何要使用 mysqlnd 驱动 ? PHP 官方手册描述 : A.libmysql 驱动是由 mysql AB 公司 ( 现在是 oracle 公司 ) 编写 , 并按 mysql license 许可协议发布 , 所以在 PHP 中默认是被禁用的 .
而 mysqlnd 是由 php 官方开发的驱动 , 以 php license 许可协议发布 , 故就规避了许可协议和版权的问题 B. 因为 mysqlnd 内置于 PHP 源代码 , 故你在编译安装 php 时就不需要预先安装 mysql server 也可以提供 mysql client API (mysql_connect, pdo , mysqli), 这将减化一些工作量 .
C. mysqlnd 是专门为 php 优化编写的驱动 , 它使用了 PHP 本身的特性 , 在内存管理 , 性能上比 libmysql 更有优势 . php 官方的测试是 :libmysql 将每条记录在内存中保存了两份 , 而 mysqlnd 只保存了一份
D. 一些新的或增强的功能 增强的持久连接 引入特有的函数 mysqli_fetch_all()
引入一些性能统计函数 mysqli_get_cache_stats(), mysqli_get_client_stats(),
mysqli_get_connection_stats(),
使用上述函数 , 可很容易分析 mysql 查询的性能瓶颈 !
SSL 支持 ( 从 php 5.3.3 开始有效 )
压缩协议支持
命名管道支持 (php 5.4.0 开始有效 )
4. 看到这里 , 你可能跃跃欲试 , 很想使用 mysqlnd 驱动 , 本节描述如何使用 mysqlnd 驱动 提示 : 如果使用 mysqlnd, 并不需要预先安装 mysql
编译 php 时 , 修改以下几个项参数即可 --with-mysql= mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql =mysqlnd
验证 : 如果在 phpinfo 输出的 mysql 项中发现 client API Version : mysqlnd, 说明 mysqlnd 驱动安装成功 .
另外 , 附一个可用于生产环境的 php 的编译参数列表 ./configure --prefix=/usr/local/php \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--with-mcrypt \
--with-curlwrappers \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--without-pear