专栏首页运维录mysqlnd 是什么?

mysqlnd 是什么?

《复仇者联盟4:终局之战》奇异博士比手势的时候,钢铁侠就知道他的使命了。

什么是 mysqlnd?


mysqlnd (MySQL native driver) MySQL原生驱动,是由 PHP 提供的连接 mysql数据库的驱动程序,用于代替 libmysql驱动程序。

为什么要使用 mysqlnd?


1. 原生支持

libmysq驱动,依赖mysql客户端库(libmysqlclient)。

为了使用 libmysql驱动,需要在编译PHP之前安装好 mysql客户端库并指定其位置。

# 编译 php 使用 libmysql

./configure --prefix=/usr/local/php \
    --with-mysql=/path/to/mysql_config \
    --with-mysqli=/path/mysql_config \
    --with-pdo-mysql=/path/mysql_config \
    # 其它参数省略...
    
make && make install

使用 mysqlnd 则不必安装 mysql 客户端,因为PHP原生支持、直接在编译 php 时使用以下几个项参数即可:

# 编译 php 使用 mysqlnd

./configure --prefix=/usr/local/php \
    --with-config-file-path=/etc/ \
    --enable-mysqlnd \
    --with-mysql=mysqlnd \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
    # 其它参数省略...
    
make && make install

2. 高级功能

mysqlndZend引擎高度集成,因此提供更多高级特性,以及有效利用Zend进行加速。

3. license 版权

libmysqlMySQL AB公司开发的,现在版权属于 Oracle 公司,它使用 MYSQL License发布。mysqlnd 是由 Zend公司开发并使用 PHP License发布的,避免 Oracle 版权问题。

扩展


1. 连接 mysql 数据库的 PHP扩展库:

  • mysql 扩展 (Original MySQL) 在php 7.x版本被移除。
  • mysqli 增强扩展 (MySQL Improved Extension) 。
  • pdo_mysql (pdo for mysql) 从5.4.0开始默认使用 mysqlnd 驱动。

2. PDO 对象

  • PHP 数据对象 (PDO) 扩展,为PHP访问数据库定义了一个轻量级的一致接口。
  • PDO 提供了一个数据访问抽象层,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。

参考文章:

https://www.php.net/manual/en/set.mysqlinfo.php

小结


  • mysqlnd 库是C语言写成的PHP扩展,从5.3.0开始成为 PHP 的一部分,从5.4.0开始成为默认驱动
  • mysqlnd 与 Zend 引擎集成,加快php程序执行速度,减少内存消耗。
  • mysqlnd 提供了插件机制,例如 mysqlnd_ms mysqlnd 主从复制和负载均衡插件。

本文分享自微信公众号 - 运维录(gh_70d95b8f5f7c),作者:东南

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ​ mysql编译安装脚本

    这篇文章发布于 2015年,内容是介绍使用源码方式编译安装 mysql-5.6 ,时间回到 2015年,那时候 Docker还在蓄能阶段没有全面爆发。

    用户1560186
  • ​创建一个Docker 容器

    之前公众号发布了三篇关于Docker镜像与仓库的文章,如果需要阅读可以在微信公众号后台回复 镜像 获得文章链接,接下来让我们创建第一个容器。

    用户1560186
  • 如何拷贝Docker容器内的文件?

    某个项目容器需要添加 wkhtmltopdf 软件包用于处理html与pdf文件转换,由于默认的apt源服务器在国外,使用apt 安装 wkhtmltopdf ...

    用户1560186
  • 生产系统中只读表的实现思路(r2第43天)

    在生产系统中有些时候需要保证一些表的只读特性,不允许表的数据被轻易修改。可能有一下的场景比较适用。 1) 一些系统中有一些类似数据字典信息的表。这些表的信息基本...

    jeanron100
  • 老树开新花,慧聪尚能饭否?

    当阿里全面转入B2C和C2C大众消费型电商业务时,B2B这一远离人们视野的市场正在焕发第二春。专注于IC元器件的B2B电商科通芯城登陆港交所,B2B开放数据平台...

    罗超频道
  • 龙门阵之 DevOps 门外汉须知

    作者:龙井 本文根据《龙门阵之DevOps门外汉》直播内容精简整理而成。 直播 PPT 分享链接: https://pan.baidu.com/s/1i5ss6...

    DevOps时代
  • 从电子游戏到DevOps

    在一个项目团队中,开发与运维之间的关系像极了知名大型游戏《刺客信条》里的故事:开发就是追求自由的刺客联盟——我喜欢用各种新颖技术手段去满足用户爸爸那些花里胡哨的...

    CORNERSTONE
  • Lucene 基础

    Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apac...

    王念博客
  • 【批处理学习笔记】第二十六课:返回值

        有些命令在执行之后将会返回一定的错误值(errorlevel),可以通过errorlevel的值判断命令执行的状况。这点类似于C语言里面的exit(nu...

    Angel_Kitty
  • iOS标准库中常用数据结构和算法之链表

    功能:对双向链表进行添加、删除功能。 头文件:#include <search.h> 平台:POSIX 函数签名:

    欧阳大哥2013

扫码关注云+社区

领取腾讯云代金券