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

MySQL NoSQL 插件 HandlerSocket 安裝實踐與避坑指南

     編輯:MySQL 資料庫相關知識

HandlerSocket 讓 MySQL 繞過 SQL 解析層、直接以 NoSQL 協議訪問 InnoDB,極大提升簡單 K/V 讀寫吞吐。本文記錄 FreeBSD 7.0 + MySQL 5.1.33 環境下的編譯安裝全過程、兩大編譯報錯根因與修復方案,供同類環境參考。

環境與源碼獲取

OS: FreeBSD 7.0-RELEASE
MySQL: 5.1.33 (源碼安裝於 /site/soft/MySQL-5.1.33, 二進制於 /data2/MySQL5.1)
Plugin源碼: ahiguti-HandlerSocket-Plugin-for-MySQL-635b930

標準編譯安裝流程

cd ahiguti-HandlerSocket-Plugin-for-MySQL-635b930
./autogen.sh
./configure --with-MySQL-source=/site/soft/MySQL-5.1.33 \
            --with-MySQL-bindir=/data2/MySQL5.1/bin \
            --with-MySQL-plugindir=/data2/MySQL5.1/lib/plugin
make && make install

注意: --with-MySQL-plugindir 指定的目錄必須預先創建。

避坑一:configure 檢測版本不匹配報錯

configure: error: MySQL source version does not match MySQL binary version

根因: configure 腳本通過解析源碼目錄下 configure.in 正則提取版本號,但正則不夠健壯,導致提取失敗或不匹配。

修復: 編輯 configure,註釋掉版本一致性檢查邏輯:

# if test a$MySQL_SOURCE_VERSION != a$MySQL_BIN_VERSION ; then
# { { echo "$as_me:$LINENO: error: MySQL source version does not match MySQL binary version" >&5
# echo "$as_me: error: MySQL source version does not match MySQL binary version" >&2; }
# { (exit 1); exit 1; }; }
# fi

重新執行 ./configure ... 即可通過。

避坑二:make 階段 libtool 報錯

libtool: link: only absolute run-paths are allowed

根因: 插件源碼自帶的 libtool 版本與系統不兼容。

修復: 用系統自帶 libtool 替換源碼目錄下的同名文件:

cp /usr/local/bin/libtool ./libtool  # FreeBSD 典型路徑
# 或
cp $(which libtool) ./libtool

重新 make && make install 即可編譯通過。

安裝後驗證

mysql> INSTALL PLUGIN handlersocket SONAME 'handlersocket.so';
mysql> SHOW PLUGINS;  -- 確認 handlersocket ACTIVE

随后可通過 telnet localhost 9998 (讀端口) / 9999 (寫端口) 測試協議交互。

適用場景與局限

  • 適用: 簡單主鍵點查/範圍掃描、高頻計數器增減、會話存儲、無複雜 JOIN/事務需求的 K/V 業務。
  • 不適用: 複雜 SQL、多表關聯、事務一致性、DDL 操作、需優化器統計信息的場景。
  • 現狀提示: MySQL 5.6+ 官方內建 memcached plugin(InnoDB Memcached API),功能重疊且維護更活躍;新項目建議優先評估官方插件或 Redis。

總結

HandlerSocket 安裝核心坑點在於版本檢測正則脆弱與自帶 libtool 過舊。通過註釋版本檢查、替換系統 libtool 可快速落地。但考慮到社區活躍度與官方替代方案,**僅建議存量 5.1/5.5 環境維護使用**,新架構請轉向 InnoDB Memcached Plugin 或外部 Redis 集群。

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