mysql-proxy 体験

 以前より時々 mysql-proxy を触ってはいたのですが(本当に触る程度)、新しい環境にお試し環境を作ろうとするたびにやり方を調べなおしていたので、設定方法とその他諸々をメモとして残しておきたいと思います。

インストール前準備

 私はFedora7 を使っている(coLinux上で)ので、yum にて以下のパッケージをインストールしました。この情報はは、ソースコード内の INSTALL というファイル内にて説明されていました。
 (最初、ソースコードからのコンパイルをしようと思っていたのですが途中で面倒になってバイナリを落としてくることに方針変更したのでした。なのでバイナリを動かすためだけならばもしかしたら不要なパッケージもあるかもしれません。)

$ yum install lua lua-devel \
              libevent libevent-devel \
              glib2 glib2-devel \
              pkg-config mysqlclient14-devel

mysql-proxy バイナリの取得と展開

 バイナリを取得してきて、展開します。 

$ wget http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.6.1-linux-fc4-x86-32bit.tar.gz/from/http://mirror.mysql-partners-jp.biz/

$ tar zxvf mysql-proxy-0.6.1-linux-fc4-x86-32bit.tar.gz


展開したディレクトリの中を見てみます。

$ cd mysql-proxy-0.6.1-linux-fc4-x86-32bit
$ ls -F
sbin/ share/

お試し実行

 mysql-proxy コマンドを実行してみます。proxy内で処理するスクリプトlua という言語で記述します。バイナリアーカイブの中にはサンプルのスクリプトがいっぱい入っているのでそれを使ってみることにしましょう。
 こんなのがあります。

mysql-proxy tutorial-keepalive.lua tutorial-resultset.lua tutorial-warnings.lua
tutorial-basic.lua tutorial-load-multi.lua tutorial-rewrite.lua
tutorial-constants.lua tutorial-packets.lua tutorial-states.lua
tutorial-inject.lua tutorial-query-time.lua tutorial-tokenize.lua


 スクリプトファイルの指定には --proxy-lua-script オプションを使います。

$ sbin/mysql-proxy --proxy-lua-script=share/tutorial-states.lua


 以下実行例。 mysql-proxy を起動しておいて、別のターミナル(窓)から、mysql への接続、status コマンドの発行、 use test でデータベースの選択コマンドを発行、を行ったときの実行例です。

[sakaik@colin mysql-proxy-0.6.1-linux-fc4-x86-32bit]$ sbin/mysql-proxy --proxy-lua-script=share/tutorial-states.lua 
--> a client really wants to talk to a server
<-- let's send him some information about us
    mysqld-version: 50125
    thread-id     : 12
    scramble-buf  : "o4R\"MB@\\/sx#?Ti5g*8z\000"
    server-addr   : 127.0.0.1:3306
    client-addr   : 127.0.0.1:33285
--> there, look, the client is responding to the server auth packet
    username      : root
    password      : ""
    default_db    : 
<-- auth ok
--> someone sent us a query
    query: select @@version_comment limit 1
--> someone sent us a query
    query: select DATABASE(), USER() limit 1
--> someone sent us a query
    query: select @@character_set_client, @@character_set_connection, @@character_set_server, @@character_set_database limit 1
--> someone sent us a query
--> someone sent us a query
    query: SELECT DATABASE()
--> someone sent us a query

 なお、mysql-proxy はデフォルトで 4040 ポートで待ち受けています。また mysql はデフォルトでは localhost に対しての接続はsocket接続になるので、TCP/IP接続にするために、ホスト名として 127.0.0.1 を指定します。

$ mysql -uroot -h127.0.0.1 -P4040
mysql> status
:
mysql> use test


 他のスクリプトも中を覗きながら、色々試してみるといいでしょう。私も勉強がてら各チュートリアルスクリプトの中身を覗いていってみたいと思います。