[转]PHP 5.3.0以上推荐使用mysqlnd驱动

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 我们一般的使用场景,比较少关注PHP版本的问题,而且市面上提供的PHP运行环境都还是5.2系列的。 原文:http://zhangxugg-163-com.iteye.com/blog/1894990 1.

我们一般的使用场景,比较少关注PHP版本的问题,而且市面上提供的PHP运行环境都还是5.2系列的。

原文:http://zhangxugg-163-com.iteye.com/blog/1894990

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
关系型数据库 MySQL 数据库连接
PHP数据库驱动扩展与不同方式连接数据库方式技术详解
php的强大就是因为它有很多优质的扩展库!
75 0
PHP数据库驱动扩展与不同方式连接数据库方式技术详解
|
存储 负载均衡 NoSQL
PHP设置Redis储存Session,自定义session驱动
PHP也可以配置将session保存在redis或者memcache中,在几种用来存储会话数据的方式。显然是Redis在效率上要更快些,而与memcached相比,因为有持久化,也更安全一些。 所以也是常用的负载均衡环境处理session的策略。 但因为是将信息储存在内存中,可能会出现内存不足、利用率不高等问题。 优点:效率高 缺点:信息储存在内存中,会产生大小不一的内存块,内存无法完全利用,并且可能出现内存不足。
114 0
PHP设置Redis储存Session,自定义session驱动
|
PHP
关于 php使用扩展控制树莓派io 驱动超声波测距
关于 php使用扩展控制树莓派io 驱动超声波测距
70 0
关于 php使用扩展控制树莓派io 驱动超声波测距
|
关系型数据库 MySQL PHP
|
NoSQL 测试技术 PHP
使用PHP驱动的MongoDB的单点查询性能测试
之前的测试,发现MongoDB的插入操作在使用PHP驱动时比使用mongo控制台更快。测试发现查询也是类似的情况(以下测试都使用WT引擎)。http://blog.chinaunix.net/uid-20726500-id-4998173.
1235 0
|
NoSQL 测试技术 PHP
重新认识Mongodb的插入性能(使用PHP驱动)
对于我之前的关于Mongodb的插入速度的问题,有网友jasbling2提出了质疑。 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=20726500&id=4981629 这么导入...
930 0
|
SQL 数据库连接 PHP
Unofficial Microsoft SQL Server Driver for PHP (sqlsrv)非官方的PHP SQL Server 驱动
原文 Unofficial Microsoft SQL Server Driver for PHP (sqlsrv) Here are unofficial modified builds of Microsoft's sqlsrv and pdo_sqlsrv drivers for PHP, version 3.
1319 0
|
7月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
81 0