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

原文地址:https://www.cnblogs.com/wajika/p/6246656.html