傳統 MySQL + Memcached 架構痛點:
aptitude install libmysqld-dev
tar zxf mysql-5.1.37.tar.gz
tar zxf ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5f7443.tar.gz
cd ahiguti-HandlerSocket-Plugin-for-MySQL-f5f7443
./autogen.sh
./configure --with-mysql-source=../mysql-5.1.37 \
--with-mysql-bindir=/usr/bin \
--with-mysql-plugindir=/usr/lib/mysql/plugin
make && make install
若 configure 報 MySQL source version does not match,在 MySQL 原始碼目錄建立 VERSION 檔:
MYSQL_VERSION_MAJOR=5
MYSQL_VERSION_MINOR=1
MYSQL_VERSION_PATCH=37
MYSQL_VERSION_EXTRA=
[mysqld]
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 / key_buffer_size
INSTALL PLUGIN handlersocket SONAME 'handlersocket.so';
SHOW PROCESSLIST; -- 應見 handlersocket 執行緒
lsof -i :9998 -- 確認埠口監聽
CREATE TABLE `test`.`t` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`a` VARCHAR(10) NOT NULL,
`b` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `a_b` (`a`,`b`)
) ENGINE=InnoDB;
| 操作 | 格式 | 說明 |
|---|---|---|
| 開啟索引 | P <index_id> <db> <table> <index> <columns> | 建立連線句柄 |
| 插入 | <index_id> + <col_count> <val1> ... <valN> | 對應 INSERT |
| 查詢 | <index_id> <op> <col_count> <val1> ... <limit> <offset> | op: =, >, >=, <, <=, 前綴匹配 |
$ telnet localhost 9999
P 1 test t PRIMARY id,a,b
1 + 3 1 a1 b1
1 + 3 2 a2 b2
$ telnet localhost 9998
P 1 test t PRIMARY id,a,b
1 = 1 1 1 0 -- 查 id=1,限 1 筆,offset 0
ROW 格式,複制環境需確認相容性。innodb_buffer_pool_size 時預留充足空間。