mysqlnd插件mysqlnd_ms和mysqlnd_qc的介绍

80 篇文章 0 订阅
43 篇文章 0 订阅

一.首先,mysqlnd是啥个玩意?

为什么要使用mysqlnd

原来的libmysql用的好好的,为什么还要搞一个mysqlnd出来呢?
原因一: license问题
libmysql是MYSQL AB公司开发的,现在已经是Oracle集团所属的了,它使用MYSQL license发布。
This ultimately led to MySQL support being disabled by default in PHP
mysqlnd 是php的一部分,使用PHP license发布。
从此 licensing 的问题就算是解决了。
原因二:编译问题
使用libmysql的时候,如果要正常编译php,必须首先安装好mysql。
如果是单纯的一台WEB服务器,装个mysql似乎有点浪费了。
mysqlnd的话,就不必安装mysql,直接可用。
原因三:性能问题
由于mysqlnd是一个php扩展,使用了php memory management system,在内存使用方面效率相当高。
举个例子:
使用libmysql的时候,mysql结果集中的每一行都在内存中储存了二次 !
使用mysqlnd,结果集只会储存一次。
而且它还服从于php.ini中memory_limit的设置。
Using MySQL Native Driver leads to comparable or better performance than using MySQL Client Library。
mysqlnd的新特性
1 改进的persistent connection。
2 特殊函数 mysqli_fetch_all()


二.mysqlnd插件

这个扩展, 主要实现了, 连接保持和切换, 负载均衡和读写分离等, 也就是说, 这个扩展会去分别PHP发给MySQL的query, 如果是”读”的query, 就会把query发送给从库(配置中指明), 并且支持负载均衡; 而如果是”写”的query, 就会把query发送给主库.

不过这个扩展需要搭配mysqlnd一起使用(从PHP5.4 beta1开始, 我们已经把mysqlnd作为mysql, mysqli, pdo的默认链接目标, 当然, 你也可以通过–with-mysql=***来制定你想要链接到libmysql).

这个扩展使用的方法也很简单, 首先在php.ini中定义配置:

 
 
  1. mysqlnd_ms.enable=1
  2. mysqlnd_ms.ini_file=/path/to/mysqlnd_ms_plugin.ini

之后, 在你指明的mysqlnd_ms_plugin.ini中配置好MySQL的主从库就好了:

 
 
  1. [myapp]
  2. master[]=localhost:/tmp/mysql.sock
  3. slave[]=192.168.2.27:3306

博文发出以后, Ulf提醒我, 从1.1.0开始, 配置文件改为JSON格式:

Ulf_Wendel: @laruence >Thx for the blog. Please note, mysqlnd_ms config format was changed in 1.1.0. Now JSON based

所以新的配置应该类似于如下格式:

 
 
  1. {
  2.     "myapp": {
  3.         "master": {
  4.             "master_0": {
  5.                 "host": "localhost",
  6.                 "socket": "\/tmp\/mysql.sock"
  7.             }
  8.         },
  9.         "slave": {
  10.             "slave_0": {
  11.                 "host": "192.168.2.27",
  12.                 "port": "3306"
  13.             }
  14.         }
  15.     }
  16. }

链接方式修改如下:


  
  
  1. <?php
  2. /* Load balanced following "myapp" section rules from the plugins config file */
  3. $mysqli = new mysqli("myapp", "username", "password", "database");
  4. $pdo = new PDO('mysql:host=myapp;dbname=database', 'username', 'password');
  5. $mysql = mysql_connect("myapp", "username", "password");
  6. ?>

然后就和你之前一样的来开发了.

mysqlnd_qc介绍

query cache查询缓存.
<?php
/* Use constants for maximum portability */
$query "/*" MYSQLND_QC_ENABLE_SWITCH "*/SELECT id FROM test";

/* Valid but less portable: default TTL */
$query "/*qc=on*/SELECT id FROM test";

/* Valid but less portable: per statement TTL */
$query "/*qc=on*//*qc_ttl=5*/SELECT id FROM test";

printf("MYSQLND_QC_ENABLE_SWITCH: %s\n"MYSQLND_QC_ENABLE_SWITCH);
printf("MYSQLND_QC_DISABLE_SWITCH: %s\n"MYSQLND_QC_DISABLE_SWITCH);
printf("MYSQLND_QC_TTL_SWITCH: %s\n"MYSQLND_QC_TTL_SWITCH);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anssummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值