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: 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 ... 即可通過。
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 (寫端口) 測試協議交互。
memcached plugin(InnoDB Memcached API),功能重疊且維護更活躍;新項目建議優先評估官方插件或 Redis。HandlerSocket 安裝核心坑點在於版本檢測正則脆弱與自帶 libtool 過舊。通過註釋版本檢查、替換系統 libtool 可快速落地。但考慮到社區活躍度與官方替代方案,**僅建議存量 5.1/5.5 環境維護使用**,新架構請轉向 InnoDB Memcached Plugin 或外部 Redis 集群。