# mysqlをインストール
# 既にインストール済みなら同じverのソースを持ってくる
brew install mysql
# ここを参考に。
http://www.bigegg.net/post/4651592197/handlersocket-osx
cp /Library/Caches/Homebrew/mysql-5.5.20.tar.gz .
tar zxvf mysql-5.5.20.tar.gz
cd mysql-5.5.20
# configure.cmakeにバグがあるので、下記をみて修正。
http://bugs.mysql.com/bug.php?id=65050
cmake .
# 起動するも失敗
mysql.server start
ERROR! The server quit without updating PID file (…)
# conf
cp /usr/local/Cellar/mysql/5.5.20/support-files/my-small.cnf /etc/my.cnf
mysql_install_db --verbose --user=`whoami` --basedir=/usr/local/Cellar/mysql/5.5.20 --datadir=/usr/local/var/mysql
# 再度起動
mysql.server start
Starting MySQL
.. SUCCESS!
# handler socketをインストール
# ここを参考に。
https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL
git clone git://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL.git
cd HandlerSocket-Plugin-for-MySQL/
./autogen.sh
./configure --with-mysql-source=/Users/xxx/src/mysql-5.5.20(mysqlソースパス) --with-mysql-bindir=/usr/local/Cellar/mysql/5.5.20/bin/(mysqlコマンドのパス) --with-mysql-plugindir=/usr/local/Cellar/mysql/5.5.20/lib/plugin
make
make install
# 別コンソールでmysqlを起動し、
mysql> install plugin handlersocket soname 'handlersocket.so';
# プラグインが入ったかな。
ls /usr/local/Cellar/mysql/5.5.20/lib/plugin/
# handlersocketの設定を入れる。
sudo vi /etc/my.cnf
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.server stop
Shutting down MySQL
. SUCCESS!
mysql.server start
Starting MySQL
.. SUCCESS!
# 別コンソールでmysqlを起動し、
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 |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | 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 |
+-----------------------+--------+--------------------+------------------+---------+
18 rows in set (0.00 sec)
# 入った!!
# 使ってみる
use test;
CREATE TABLE `user` (
`user_id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL DEFAULT NULL,
`birthday` DATE NULL DEFAULT NULL,
`memo` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`user_id`)
);
# ruby用クライアントを入れる
# tarはここからダウンロード
https://bitbucket.org/winebarrel/ruby-handlersocket/src
cd HandlerSocket-Plugin-for-MySQL/ ←ここでmakeせねばならん。
tar zxvf winebarrel-ruby-handlersocket-c19841e47ea2.tar.gz
cp winebarrel-ruby-handlersocket-c19841e47ea2/* .
ruby extconf.rb
make
make install
# ------------------------------------
# sample.rb
require 'handlersocket'
hs = HandlerSocket.new('127.0.0.1', 9999)
# Args (default value)
# host(localhost), port(9998), timeout(600), listen_backlog(256)
# 3は識別子
hs.open_index(3, 'test', 'user', 'PRIMARY', 'user_id,name,birthday,memo');
# select 接続、条件、条件値、count、offset
p res = hs.execute_single(3, '>=', ['2'], 100, 0);
# insert 接続、行
hs.execute_insert(3, [1,"name1","2001-01-01","memo1"]);
hs.execute_insert(3, [2,"name2","2001-01-01","memo2"]);
hs.execute_insert(3, [3,"name3","2001-01-01","memo3"]);
# delete 接続、条件、条件値、count、offset ← selectして消すため
# 詳細はここ
# https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-ja/perl-client.ja.txt
hs.execute_delete(3, '=', ['2'], 1, 0);
# 高速なexecute_multi
p hs.execute_multi(
[
[3, '=', ['3'], 1, 0],
[3, '=', ['1'], 1, 0]
]
)
hs.close
# ------------------------------------
sample.rb
require 'handlersocket'
hs = HandlerSocket.new('127.0.0.1', 9999)
# Args (default value)
# host(localhost), port(9998), timeout(600), listen_backlog(256)
# 3は識別子
hs.open_index(3, 'test', 'user', 'PRIMARY', 'user_id,name,birthday,memo');
# select 接続、条件、条件値、count、offset
p res = hs.execute_single(3, '>=', ['2'], 100, 0);
# insert 接続、行
hs.execute_insert(3, [1,"name1","2001-01-01","memo1"]);
hs.execute_insert(3, [2,"name2","2001-01-01","memo2"]);
hs.execute_insert(3, [3,"name3","2001-01-01","memo3"]);
# delete 接続、条件、条件値、count、offset ← selectして消すため
# 詳細はここ
# https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-ja/perl-client.ja.txt
hs.execute_delete(3, '=', ['2'], 1, 0);
# 高速なexecute_multi
p hs.execute_multi(
[
[3, '=', ['3'], 1, 0],
[3, '=', ['1'], 1, 0]
]
)
hs.close
次回はこちらMacのMySQLでHandlerSocketのベンチマークをとった
0 件のコメント:
コメントを投稿