以前より時々 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/
展開したディレクトリの中を見てみます。
$ 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
他のスクリプトも中を覗きながら、色々試してみるといいでしょう。私も勉強がてら各チュートリアルスクリプトの中身を覗いていってみたいと思います。