HandlerSocketを入れてみる

こんちはー

はてなダイアリーからHatena Blogに移行して最初の記事は
自分が契約しているさくらのVPS1GプランにHandlerSocketをインストールしたときの記録です。

環境

HandlerSocketって何?

DeNAの樋口さんが開発されたMySQLへのアクセスを高速化するプラグインで、MySQLに非SQLなインタフェースでアクセスできるようになります。
具体的には独自プロトコルでInnoDB等のストレージエンジンを直接叩くプラグインらしいです。

どんな仕組みかとかどれぐらい速くなるかは作者のスライドをみてください

インストール - makeするまで

HandlerSocketのインストールにはお使いのMySQLソースコードが必要です。あらかじめ入手しておいてください。
またHandlerSocket本体はgithubで配付されています。

# git clone https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL.git 
# cd HandlerSocket-Plugin-for-MySQL
# ./configure --with-mysql-source=/root/rpmbuild/SOURCES/mysql-5.5.27 \
--with-mysql-bindir=/usr/bin \
--with-mysql-plugindir=/usr/lib64/mysql/plugin

configureのオプションは以下の通り指定します

  • --with-mysql-source : あらかじめ入手しておいたMySQLソースコード。自分は5.5.27を使っている
  • --with-mysql-bindir : mysqlコマンドの在処。which mysql_configしたらOK
  • --with-mysql-plugindir : プラグインの在処。それっぽいのを探す。

これでMakefileが生成されました。
あとはmake installするだけ・・・と言いたいですがCentOSを使っている方は生成されたMakefile中に書かれている「-DMY_PTHREAD_FASTMUTEX=1」を1つ残らず削除します。(clientのMakefileも忘れないように!)
削除が終わったらmake installしてください。

インストール - make後

make installが終わったら/etc/my.cnfに以下の設定を追記します.

[mysqld]
handlersocket_port = 9998
handlersocket_port_wr = 9999
handlersocket_address =
handlersocket_verbose = 0
handlersocket_timeout = 300
handlersocket_threads = 16
thread_concurrency = 128
open_files_limit = 65535

各項目の意味はググってください。
そしてmysqlに接続して以下のコマンドを実行していきます。

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

ここまで実行したら以下のようになるはずです。

mysql > show plugins;
+-----------------------+----------+--------------------+------------------+---------+
| Name                  | Status   | Type               | Library          | License |
+-----------------------+----------+--------------------+------------------+---------+
| binlog                | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| mysql_native_password | ACTIVE   | AUTHENTICATION     | NULL             | GPL     |
| mysql_old_password    | ACTIVE   | AUTHENTICATION     | NULL             | GPL     |
| CSV                   | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| MEMORY                | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| MRG_MYISAM            | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| MyISAM                | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| ARCHIVE               | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| FEDERATED             | DISABLED | STORAGE ENGINE     | NULL             | GPL     |
| BLACKHOLE             | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| InnoDB                | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| INNODB_TRX            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_LOCKS          | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_LOCK_WAITS     | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP_RESET      | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMPMEM         | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMPMEM_RESET   | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| PERFORMANCE_SCHEMA    | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| partition             | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| handlersocket         | ACTIVE   | DAEMON             | handlersocket.so | BSD     |
+-----------------------+----------+--------------------+------------------+---------+

環境によって異なるので全く同じでなくても大丈夫です。「handlersocket」という項目が出てていたら完了です。

次回は実際に接続していろいろやってみようと思います