首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL HandlerSocket 插件安裝配置與 PHP 整合完整教程

     編輯:MySQL 資料庫相關知識

什麼是 HandlerSocket

HandlerSocket 是 MySQL Daemon Plugin,繞過 SQL 解析、優化器、鎖層,直接讓客戶端以 **Key-Value 協議** 存取 InnoDB/MyISAM 資料。號稱「MySQL 變身 NoSQL」,查詢效能提升數倍,適合高併發簡單查詢場景。

架構優勢

  • 跳過 SQL Parse、Optimizer、Table Open/Close
  • 持久連線、批次管線、多執行緒
  • 直接操作儲存引擎介面(handler API)
  • 支援索引查詢、範圍掃描、LIMIT、排序

安裝環境

  • OS: CentOS 6.3 x86_64
  • MySQL: 5.5.20 源碼編譯安裝於 /usr/local/webserver/mysql5520
  • PHP: 5.3.18 安裝於 /usr/local/webserver/php5318
  • HandlerSocket 安裝目標:/usr/local/webserver/handlersocket

前置依賴

yum install -y gcc gcc-c++ libtool make openssl-devel \
  perl-DBI perl-DBD-MySQL rpm-build gperf \
  readline-devel ncurses-devel time perl-Time-HiRes

編譯安裝 HandlerSocket

git clone https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL.git
cd HandlerSocket-Plugin-for-MySQL
./autogen.sh
./configure --prefix=/usr/local/webserver/handlersocket \
  --with-mysql-source=/opt/mysql-5.5.20 \
  --with-mysql-bindir=/usr/local/webserver/mysql5520/bin \
  --with-mysql-plugindir=/usr/local/webserver/mysql5520/lib/mysql/plugin
make

# 常見錯誤修復:libtool 相對路徑問題
# 編輯 handlersocket/Makefile 第 301 行,將 -rpath 後改為絕對路徑
make install

MySQL 配置啟用

# /etc/my.cnf [mysqld] 區段
plugin-load = handlersocket.so
loose_handlersocket_port = 9998      # 讀請求端口
loose_handlersocket_port_wr = 9999   # 寫請求端口
loose_handlersocket_threads = 16     # 讀執行緒數
loose_handlersocket_threads_wr = 1   # 寫執行緒數
open_files_limit = 65535

# 建議同步調大緩存
innodb_buffer_pool_size = 4G
key_buffer_size = 512M

啟用插件並驗證

INSTALL PLUGIN handlersocket SONAME 'handlersocket.so';
SHOW PLUGINS;  -- 確認 ACTIVE
SHOW VARIABLES LIKE 'handlersocket%';
# 驗證端口監聽
lsof -i -P | grep mysqld
# 應見 9998 (read), 9999 (write), 3306 (sql)

PHP 擴展安裝 (php-handlersocket)

wget https://php-handlersocket.googlecode.com/files/php-handlersocket-0.3.1.tar.gz
tar -zxvf php-handlersocket-0.3.1.tar.gz
cd handlersocket
/usr/local/webserver/php5318/bin/phpize
./configure --with-php-config=/usr/local/webserver/php5318/bin/php-config
make && make install

# 編輯 php.ini
echo "extension=handlersocket.so" >> /usr/local/webserver/php5318/etc/php.ini

# 重啟 PHP-FPM/Apache
service php-fpm restart

PHP 使用範例

openIndex(1, $db, $table, HandlerSocket::PRIMARY, 'id,k,v');

// 單鍵查詢
$ret = $hs_r->executeSingle(1, '=', ['k1'], 1, 0);
var_dump($ret);

// 批次查詢
$ret = $hs_r->executeMulti([
    [1, '=', ['k1'], 1, 0],
    [1, '=', ['k2'], 1, 0],
]);
var_dump($ret);

// 寫入需用寫端口
$hs_w = new HandlerSocket($host, $port_w);
$hs_w->openIndex(2, $db, $table, '', 'k,v');
$hs_w->executeInsert(2, ['k99', 'v99']);
$hs_w->executeUpdate(2, '=', ['k99'], ['v99_new'], 1, 0);
$hs_w->executeDelete(2, '=', ['k99'], 1, 0);

測試表結構

CREATE TABLE `hstesttbl` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `k` CHAR(6) DEFAULT NULL,
  `v` CHAR(6) DEFAULT NULL,
  KEY `idx_k` (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

已知限制與避坑

限制說明
寫操作不清除 Query Cache讀到舊資料,建議關閉 QC 或應用層自行失效
不支援 AUTO_INCREMENT 回傳插入需自行生成主鍵(UUID/雪花算法)
無事務支援單操作原子,多操作無原子性
僅支援單索引查詢複雜 JOIN/子查詢仍需 SQL

結語

HandlerSocket 讓 MySQL 擁有 NoSQL 級讀寫效能,適合「高併發、簡單模式、可容忍最終一致」的場景(計數器、Session、Feed、配置)。生產使用需權衡功能限制、運維複雜度、MySQL 8.0 原生 X Plugin/Document Store 替代方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved