2012年4月30日月曜日

MacにMySQL(5.5系)とHandlerSocketをいれた


# 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 件のコメント:

コメントを投稿