一.安装HandlerSocket

1.下载

http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL

获取 ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-71-g159ea6d.tar.gz

上传到LINUX目录/usr/local/src/ 下

2.安装

cd /usr/local/src/

tar zvfx ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-71-g159ea6d.tar.gz

cd ahiguti-HandlerSocket-Plugin-for-MySQL-159ea6d/

./autogen.sh

./configure --with-mysql-source=/usr/local/src/mysql-5.1.47 --with-mysql-binddir=/usr/local/app/mysql/bin/ --with-mysql-plugindir=/usr/local/app/mysql/lib/mysql/plugin/ --prefix=/usr/local/app/mysql

其中

--with-mysql-source    MYSQL源码目录

--with-mysql-binddir    MYSQL安装后的BIN目录

--with-mysql-plugindir MYSQL安装后PLUGIN的目录

(***************小插曲************************

笔者在configure的时候遇到的问题:

checking mysql source... yes: Using /usr/local/src/mysql-5.1.47, version 5.1.47
checking for mysql_config... /usr/bin/mysql_config
checking mysql binary... yes: Using /usr/bin/mysql_config, version 5.0.77
configure: error: MySQL source version does not match MySQL binary version

是默认的/usr/bin/mysql_config与mysql-5.1.47源码版本不一样,所以做一下补充:

cp /usr/local/app/mysql/bin/mysql_config /usr/bin/mysql_config

************************************************************)

编译安装:

make;make install

添加配置

vi /etc/my.cnf

增加如下选项:

[mysqld] 
loose_handlersocket_port = 9998   
# the port number to bind to (for read requests) 
loose_handlersocket_port_wr = 9999   
# the port number to bind to (for write requests) 
loose_handlersocket_threads = 16   
# the number of worker threads (for read requests) 
loose_handlersocket_threads_wr = 1   
# the number of worker threads (for write requests) 
open_files_limit = 65535   
# to allow handlersocket accept many concurrent   
# connections, make open_files_limit as large as   
# possible.

然后使用root登录MYSQL

mysql -u root -h localhost -p

在MYSQL控制台中执行命令

mysql> install plugin handlersocket soname 'handlersocket.so';

如果执行成功,可以看到9998 9999 端口已经启动

# netstat -ln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State     
tcp        0      0 0.0.0.0:997                 0.0.0.0:*                   LISTEN     
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN     
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN     
tcp        0      0 0.0.0.0:9998                0.0.0.0:*                   LISTEN     
tcp        0      0 0.0.0.0:9999                0.0.0.0:*                   LISTEN
     
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN     
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN     
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN     
tcp        0      0 :::22                       :::*                        LISTEN     
udp        0      0 0.0.0.0:50187               0.0.0.0:*                              
udp        0      0 0.0.0.0:991                 0.0.0.0:*                              
udp        0      0 0.0.0.0:994                 0.0.0.0:*                              
udp        0      0 0.0.0.0:5353                0.0.0.0:*                              
udp        0      0 0.0.0.0:111                 0.0.0.0:*                              
udp        0      0 :::43696                    :::*                                   
udp        0      0 :::5353                     :::*

安装完毕。不需要修改mysql的源代码。
mysql需要5.1或者以后版本。

二、安装PHP的handlerSocket扩展

1.下载源码

http://code.google.com/p/php-handlersocket/downloads/detail?name=php-handlersocket-0.0.7.tar.gz

2.安装

cd /usr/local/src/

tar zvfx php-handlersocket-0.0.7.tar.gz

cd php-handlersocket

/usr/local/bin/phpize
./configure --with-handlersocket --with-php-config=/usr/local/bin/php-config --with-handlersocket-includedir=/usr/local/app/mysql/include/handlersocket/

make LDFLAGS='-L/usr/local/app/mysql/lib' ;

make install

三、使用PHP handlersocket的API

实例化:
  /*
   * String  $host:MySQL ip;
   * String  $port:handlersocket插件的监听端口,它有两个端口可选:一个用于读、一个用于写
   */
  $hs = new HandlerSocket($host, $port);

  打开一个数据表:
  /*
   * Int       $index:这个数字相当于文件操作里的句柄,HandlerSocket的所有其他方法都会依据这个数字来操作由这个   openIndex打开的表,
   * String  $dbname:库名
   * String  $table:表名
   * String  $key:表的“主键”(HandlerSocket::PRIMARY)或“索引名”作为搜索关键字段,这就是说表必须有主键或索引
   *                 个人理解:要被当做where条件的key字段,这样可以认为handlersocket只有一个where条件
   * String  $column:'column1,column2' 所打开表的字段(以逗号隔开),就是说$table表的其他字段不会被操作
   */
  $hs->openIndex($index, $dbname, $table, $key, $column);

  查询:
  /*
   * Int     $index: openIndex()所用的$index
   * String  $operation:openIndex方法中指定的$key字段所用的操作符,目前支持'=', '>=', '<=', '>',and '<';可以理解为where条件
   * Array   $value
   * Int       $number(默认是1):获取结果的最大条数;相当于SQL中limit的第二个参数
   * Int     $skip(默认是0):跳过去几条;相当于SQL中limit的第一个参数
   */
  $retval = $hs->executeSingle($index, $operation, $value, $number, $skip);

  插入(注意:此处的openIndex要用$port_wr,即读写端口):
  /*
   * Int     $index: openIndex()所用的$index
   * Array   $arr:数字元素数与openIndex的$column相同
   */
  $retval = $hs->executeInsert($index, $arr);

  删除(注意:此处的openIndex要用$port_wr,即读写端口):
  /*
   * Int     $index: openIndex()所用的$index
   * String  $operation:openIndex方法中指定的$key字段所用的操作符,目前支持'=', '>=', '<=', '>',and '<';可以理解为where条件
   * Array   $value
   * Int     $number(默认是1):获取结果的最大条数;相当于SQL中limit的第二个参数
   * Int     $skip(默认是0):跳过去几条;相当于SQL中limit的第一个参数
   */
  $retval = $hs->executeDelete($index, $operation, $value, $number, $skip);

  更新(注意:此处的openIndex要用$port_wr,即读写端口):
  /*
   * Int     $index: openIndex()所用的$index
   * String  $operation:openIndex方法中指定的$key字段所用的操作符,目前支持'=', '>=', '<=', '>',and '<';可以理解为where条件
   * Array   $value
   * Int       $number(默认是1):获取结果的最大条数;相当于SQL中limit的第二个参数
   * Int     $skip(默认是0):跳过去几条;相当于SQL中limit的第一个参数
   */
  $retval = $hs->executeUpdate($index, $operation, $value, $number, $skip);

示例:

<?php

$host = 'localhost';
$port = 9998;
$port_wr = 9999;
$dbname = 'discuz';

$table = 'cdb_members';

$hs = new HandlerSocket($host, $port);
if (!($hs->openIndex(0, $dbname, $table, "username", 'uid,username,password,gender'))) {    echo $hs->getError(), PHP_EOL;     die(); }

$retval = $hs->executeSingle(0, '=', array('吉祥二宝'), 10, 0);  var_dump($retval);

?>

转载于:https://my.oschina.net/u/141969/blog/609527

Mysql插件HandlerSocket的应用相关推荐

  1. mysql handler socket_MySQL的NoSQL插件HandlerSocket

    [IT168 评论] MySql作为一款开源数据库,有着使用成本低.简单易用的特点.对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大 ...

  2. emq插件开发mysql_EMQ的Mysql插件

    EMQ最新版的是EMQX3.x.x版本,一如既往的支持Mysql认证,这里专门对Mysql认证插件做个研究,写点总结.本人能力有限,文章不足之处希望及时反馈以免误导. 首先我先描述一下我的应用场景:我 ...

  3. 编译ARM平台的 QtEmbedded 的MySQL插件和移植MySQL到ARM开发板

    经过几天的努力,终于交叉编译出了arm平台所需Qt/E的MySQL插件(驱动),其中顺便把MySQL也移植到了mini2410的开发板上. 编译器:arm-linux-gcc(4.3.2) Pc平台: ...

  4. emq+mysql设置_EMQ--添加mysql认证及mysql插件访问控制

    EMQ-百万级分布式开源物联网MQTT消息服务器. MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿 ...

  5. arm qt mysql插件_Ubuntu下编译ARM平台Qt的MySQL插件

    最近需要将一个程序移植到arm平台上,程序调用了MySQL数据库,所以就牵扯到将MySQL数据库移植到ARM平台上面,所以在网上大量查阅资料.在baidu文库发现了一篇文档,是wlzxlc上传的文档名 ...

  6. Wordpress 修改 mysql 插件_史上最详细的WordPress安装教程(三):安装php 5.6及fpm、pdo、mysql等插件...

    ​安装php 5.6 yum -y install epel-release rpm -ivh http://rpms.famillecollet.com/enterprise/remi-releas ...

  7. zabbix3.0.2 使用percona mysql插件来监控mysql5.7的详细实现过程

    zabbix3.0.2 使用percona mysql插件来监控mysql5.7的详细实现过程 --前言 上次用了zabbix自带的mysql插件来监控mysql数据库,但是太过简陋了,对于我们dba ...

  8. arm qt mysql插件_编译ARM平台的QtEmbedded的MySQL插件和移植MySQL

    编译ARM平台的QtEmbedded 的MySQL插件和移植MySQL 到ARM开发板 经过几天的努力,终于交叉编译出了arm平台所需Qt/E的MySQL插件(驱动),其中顺便把MySQL也移植到了m ...

  9. emqtt mysql认证_Emqtt -- 05 -- Mysql插件认证及访问控制

    了解了 Clientid 认证后,现在我们再来了解下 Mysql 插件认证以及访问控制,默认关闭了匿名认证 一.创建用户表和控制表 根据官方文档,用户表的名称为:mqtt_user,访问控制表的名称为 ...

  10. 如何添加MySQL插件_如何开发一个自定义的MySQL插件

    MySQL自带了很多插件,比如半同步插件.审计插件.密码验证插件等等,甚至MySQL存储引擎也是以插件方式实现的.MySQL开放的插件接口,为开发者开发自定义插件提供了便利.本文将介绍如何快速开发一个 ...

最新文章

  1. 学习C#要养成的好习惯
  2. CTFshow php特性 web133
  3. arcgis 卸载和注册表相关总结
  4. il和idl区别_我来给普及一下matlab、IDL、fortran神马的区别吧
  5. 【C语言项目】贪吃蛇游戏(下)
  6. 无重叠区间及用最少的箭射爆气球
  7. 电脑中毒的表现有哪些?电脑中毒了怎么办?
  8. 浏览器推送 comet
  9. Aligned公司在凤凰城建设数据中心将采用微电网的电力
  10. 《Cocos2d-JS开发之旅》重印在即,感谢大家的支持
  11. App测试流程及测试点
  12. 零基础学Python课后实战第五章
  13. 征信为民守初心!《征信业管理条例》颁布十周年
  14. 24个希腊字母 大小写 读音
  15. [Python从零到壹] 四十五.图像增强及运算篇之图像灰度非线性变换详解
  16. 计算机基本原理——CPU的结构与原理
  17. Android开发——Snackbar使用详解
  18. 阿里云服务器购买合同怎么申请
  19. 乐理基础知识-1.节奏
  20. 华为java 优招面试题_华为面试题及答案

热门文章

  1. 屏幕录制软件有哪些?4款超好用录屏软件下载,强烈推荐
  2. 1.业务架构·应用架构·数据架构实战 --- 架构实践全景图
  3. STM32L系列与普通STM32F系列的比较
  4. 通达信版弘历软件指标_通达信精选指标——弘历趋势
  5. 自定义 View 之抖音时钟罗盘仪效果
  6. ds18b20触摸没反应_写个DS18B20初始化程序,死活没反应
  7. 微信小程序自定义拍照和H5调用摄像头拍照
  8. MQTT X Web:在线的 MQTT 5.0 客户端工具
  9. andorid简单计算器java源码_Android开发实现的简单计算器功能【附完整demo源码下载】...
  10. 欧姆龙nj与nx哪个高端_没想到还有比三菱更垃圾的PLC,欧姆龙隆重登场