ようへいの日々精進XP

よかろうもん

Debian に MySQL 5.5 を導入して HandlerSocket を導入する一部始終

要件

  • Debian で普通に MySQL をインストールしようとすると MySQL の 5.0.x または 5.1.x がインストールされてしまうようだ
  • そもそも Debian は初心者なのでパッケージ管理もメモ
aptitude search mysql
aptitude show mysql-server-5.0
aptitude install mysql-server-5.0
  • でも MySQL 5.5 系を導入しなければならない案件がある為、MySQL で配布されている 5.5 系のパッケージを導入する
  • ついでに HandlerSocket というプラグインを導入する

手順

MySQL 5.5 のインストール

必要(らしい)なパッケージの導入
apt-get install libaio1
MySQL 5.5 パッケージの取得
cd /tmp
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.30-debian6.0-x86_64.deb/from/http://cdn.mysql.com/ -O mysql-5.5.30-debian6.0-x86_64.deb
dpkg を使ってインストール
cd /tmp
dpkg -i mysql-5.5.30-debian6.0-x86_64.deb
エラー各種
  • インストール先が /opt/mysql となってしまうので PATH を通す
echo "export PATH=$PATH:/opt/mysql/server-5.5/bin/" >> /root/.bashrc
source /root/.bashrc
  • 古いバージョンの my.cnf が影響していた
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bk
  • data ディレクトリの作成が必要
sudo mkdir /opt/mysql/server-5.5/data
cd /opt/mysql/server-5.5/
chown -R mysql:mysql data
初期データベースのインストール
/opt/mysql/server-5.5/scripts/mysql_install_db --user=mysql
MySQL の起動
/opt/mysql/server-5.5/bin/mysqld_safe &
MySQL へのアクセス
# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

HandlerSocket の導入

HandlerSocket とは
  • MySQL データベースへのアクセスを高速化するためのプラグイン。
  • MySQLSQL パーザを介さずネットワーク通信とマルチスレッド処理周辺を置き換えることによって、InnoDB等のデータベースエンジンの性能を限界まで引き出す。
  • DeNA では既にモバゲータウンとかで利用されている。
インストール準備
  • 各種パッケージの導入
sudo aptitude install libtool
sudo aptitude install autoconf
sudo aptitude install dpatch
cd /tmp
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.30.tar.gz/from/http://cdn.mysql.com/ -O mysql-5.5.30.tar.gz
tar zxvf mysql-5.5.30.tar.gz
cp mysql-5.5.30 /usr/local/src/
  • git から HandlerSocket のソースコードを取得して、インストールする
cd /tmp/
git clone https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL.git
cd HandlerSocket-Plugin-for-MySQL/
./autogen.sh
./configure --with-mysql-bindir=/opt/mysql/server-5.5/bin --with-mysql-plugindir=/opt/mysql/server-5.5/lib/plugin --with-mysql-source=/usr/local/src/mysql-5.5.30
make
make install
設定
  • /etc/mysql/my.cnf に以下の設定を行う
[mysqld]

handlersocket_port = 9998    # handlersocket が接続を受け付けるポート(参照系リクエスト用)
handlersocket_port_wr = 9999 # handlersocket が接続を受け付けるポート(更新系リクエスト用)
handlersocket_address =      # handlersocket がバインドするアドレス(空のままでOK)
handlersocket_verbose = 0    # デバッグ用
handlersocket_timeout = 300  # 通信タイムアウト(秒)
handlersocket_threads = 16   # handlersocket のワーカースレッド数
thread_concurrency = 128     # handlersocket が幾つかのスレッドを占有するため、大きめの値を指定する
open_files_limit = 65535     # ソケットを大量に開けるようにするため、大きめの値を指定する必要がある
/opt/mysql/server-5.5/support-files/mysql.server stop
/opt/mysql/server-5.5/support-files/mysql.server start
  • MySQL 内でインストール
install plugin handlersocket soname 'handlersocket.so';
確認
  • show plugins;

f:id:inokara:20130317050907p:plain

  • show variables like 'handlersocket%';

f:id:inokara:20130317050950p:plain

まとめ

MySQL 5.5 の導入

  • OS 標準ではインストールされないのでパッケージを取得してインストールすること
  • 真っさらな状態であれば PATH を通すことを忘れなければ設定は難しくない
  • data ディレクトリの設定は忘れないようにする(同時に権限の設定も忘れないこと)

HandlerSocket の導入

  • たまたまかもしれないがインストール自体はそれほど難しくなかった
  • configure にてプラグインディレクトリとソースコードのディレクトリ指定は忘れないこと
  • MySQL 内でも install コマンドを使ってインストール作業を行う必要がある

メモ

  • MySQL のプラグイン導入は初めてだった...
  • HandlerSocket のパフォーマンスについては近日中に検証を行いたい
  • chef-solo 使ってインストールする場合には、レシピは下記のように書く(但し、下記の場合には 5.1 系がインストールされる)
%w{mysql-server}.each do |package_name|
  package package_name do
    action :install
  end
end

謝辞