前回、mkaeがこけてしまうという原因で、いくら調べてもそれらしいソースを眺めてもわからなかったのですが、mirさんに教えてもらった make cleanをしてからという方法で無事インストールが出来ました。

どうやら、g++が入っていない状態でのmakeしたゴミが残っていたようです。
気持ち悪いので、インストール用に解凍したディレクトリをごっそり削除し、tarファイルを再度解凍し、作業を行いました。


# ./configure --prefix=/usr/local/mysql
# make
# make install

今度は、無事に成功しました!

次に、mysqlのデーモンの起動。
今回はテストなので起動スクリプトなどは端折って直接起動します。


# /usr/local/mysql/bin/mysqld_safe --user=mysql &

次に接続できるか確認


$ /usr/local/mysql/bin/mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.45-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

無事に接続完了しました~

次にソースを見るための cscopeというソフトの準備です。
まずは、ファイルのインデックスを作成します。
mysql-5.0.45のディレクトリに移動してから以下を実行


$ cscope-indexer ./
cscope: cannot find file /config.h
cscope: no source files found

ソースファイルが無いといわれます・・・
たしか・・・階層を再帰的に調べる必要があったなというのを思い出して、helpなどを確認し、以下を再実行


$ cscope-indexer -r ./

無事、インデックスファイルを作成できました。
以下のようなファイルが新規作成されていました。


$ ll
合計 34704
(略)
-rw-rw-r--   1 maruta maruta    70386 11月  3 15:40 cscope.files
-rw-rw-r--   1 maruta maruta 32038765 11月  3 15:40 cscope.out
(略)

早速、動かしてみます。

$ cscope

すると、こんな画面になります。

Find this C symbol:
Find this global definition:
Find functions called by this function:
Find functions calling this function:
Find this text string:
Change this text string:
Find this egrep pattern:
Find this file:
Find files #including this file:
Find all function definitions:
Find all symbol assignments:

一行目のFind this C symbol:のところにカーソルがあります。
これを、上下キーで各行に移り、そこで文字を入れて検索できるようです。
とりあえずなにをするか・・・

Find this file: まで上下キーで移動し、「select」と打ってEnterしてみます。
すると、上部の領域に以下のように出ました。


File: select

  File
0 libmysqld/item_subselect.cc
1 libmysqld/sql_select.cc
2 ndb/test/ndbapi/slow_select.cpp
3 ndb/tools/select_all.cpp
4 ndb/tools/select_count.cpp
5 sql/item_subselect.cc
6 sql/item_subselect.h
7 sql/sql_select.cc
8 sql/sql_select.h
9 tests/select_test.c
a /usr/include/sys/select.h
b /usr/include/bits/select.h

どうやら、これがselectと名前の付くファイルのようです。
sql_select.ccという7番のファイルがそれっぽいです。
7の数字キーを押すか、上下キーで移動してからEnterを押すと、viでソースファイルが開きました。

MySQLのソースとご対面です!

何が書いてあるかさっぱり・・・・
結構な長さがありますが、とりあえず下までず~~~と眺めてみました。

次は、なにかお題を決めて取り組んでみたいと思います。
それと、Emacsと連動できるようにしてみたいと思います。

作業終わって、viを閉じた後、cscopeの終了方法がわかりません。。。
とりあえず、Ctrl+d で閉じちゃいました。
その後、ぐぐったらどうやら正しい閉じ方のようです。
http://docs.sun.com/source/806-4836/cscope.html

MySQLにSenna(およびMeCab)を組み込んだTritonnのrpm版をインストールしてみました。

Tritonnプロジェクト
2007/10/31 mysql-5.0.45-tritonn-1.0.7 リリース

環境
 WindowsXP VMware上のCentOS


# cat /proc/version
Linux version 2.6.18-8.el5 (mockbuild@builder4.centos.org) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Thu Mar 15 19:57:35 EDT 2007

公式サイトのインストールページにrpmについての説明も詳しく掲載されているので、そちらを参考にインストールしてみました。
RPMによるインストール方法

まずは、http://sourceforge.jp/projects/tritonn/からファイルを落としてきます。


# ll
合計 34348
-rw-rw-r-- 1 root root   326904 10月 31  2007 MySQL-client-5.0.45-tritonn.1.0.7.i386.rpm
-rw-rw-r-- 1 root root 15670977 10月 31  2007 MySQL-server-5.0.45-tritonn.1.0.7.i386.rpm
-rw-rw-r-- 1 root root  3587159 10月 31  2007 MySQL-shared-5.0.45-tritonn.1.0.7.i386.rpm
-rw-rw-r-- 1 root root   825058 10月 31  2007 mecab-0.96-tritonn.1.0.7.i386.rpm
-rw-r--r-- 1 root root 13432779 10月 31  2007 mecab-ipadic-2.7.0.20070801-tritonn.1.0.7.i386.rpm
-rw-r--r-- 1 root root  1262282 10月 31  2007 senna-1.0.9-tritonn.1.0.7.i386.rpm

次に現状、インストール済のパッケージを調べると、以下が入っていました。


# rpm -qa | grep -i mysql
MySQL-python-1.2.1-1
mysql-server-5.0.22-2.1
mysql-5.0.22-2.1
perl-DBD-MySQL-3.0007-1.fc6
libdbi-dbd-mysql-0.8.1a-1.2.2
mysql-connector-odbc-3.51.12-2.2
php-mysql-5.1.6-12.el5

公式サイトの記述を鵜呑みにしてそのままコマンドを流すとこんなことに。


# rpm -e MySQL-server
エラー: パッケージ MySQL-server はインストールされていません。

インストール済のパッケージは小文字だから大文字じゃだめですね。


# rpm -e mysql-server

なんも帰ってこなかったので削除できたのかと思ってしまいました。
※これでは、削除できていなかったのですが、作業手順のままに書いてみます。

mysql-server-5.0.22-2.1の削除はこれで完了。
※mysql-5.0.22-2.1も削除する必要がありましたが、作業手順のままに書いてみます。(追記:mysql-serverのみ削除したたのを勘違いしてたみたいです)

次にmecabからインストール。
rpm -i だけではちょっとさびしいかなぁと思い、vhを付けてみました。


rpm -ivh mecab-0.96-tritonn.1.0.7.i386.rpm
rpm -ivh mecab-ipadic-2.7.0.20070801-tritonn.1.0.7.i386.rpm
rpm -ivh senna-1.0.9-tritonn.1.0.7.i386.rpm
rpm -ivh MySQL-shared-5.0.45-tritonn.1.0.7.i386.rpm
rpm -ivh MySQL-client-5.0.45-tritonn.1.0.7.i386.rpm
rpm -ivh MySQL-server-5.0.45-tritonn.1.0.7.i386.rpm

すると、以下のような警告がわらわら・・・
まぁ、入ったようなのでOKでしょうか?


# rpm -ivh mecab-0.96-tritonn.1.0.7.i386.rpm
準備中...                ########################################### [100%]
   1:mecab                  警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
########################################### [100%]
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します

続けて次のインストール。


# rpm -ivh mecab-ipadic-2.7.0.20070801-tritonn.1.0.7.i386.rpm
準備中...                ########################################### [100%]
   1:mecab-ipadic           警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
########################################### [100%]
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します

こちらも警告が・・

次に sennaのインストール


# rpm -ivh senna-1.0.9-tritonn.1.0.7.i386.rpm
準備中...                ########################################### [100%]
   1:senna                  警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
警告: ユーザ mir は存在しません - root を使用します
警告: グループ mir は存在しません - root を使用します
########################################### [100%]

インストールできているようですが、始めて見るとちょっとびっくりしちゃいました。

次に MySQL関連のインストール。


# rpm -ivh MySQL-shared-5.0.45-tritonn.1.0.7.i386.rpm
準備中...                ########################################### [100%]
   1:MySQL-shared           ########################################### [100%]

こちらはさくっと入りました。

次に、MySQL-client


# rpm -ivh MySQL-client-5.0.45-tritonn.1.0.7.i386.rpm
準備中...                ########################################### [100%]
 ファイル /usr/bin/msql2mysql (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysql (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysql_find_rows (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysql_waitpid (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysqlaccess (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysqladmin (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysqlbinlog (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysqlcheck (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysqldump (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysqlimport (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/bin/mysqlshow (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/share/man/man1/mysql.1.gz (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/share/man/man1/mysqlaccess.1.gz (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/share/man/man1/mysqladmin.1.gz (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/share/man/man1/mysqldump.1.gz (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して
 ファイル /usr/share/man/man1/mysqlshow.1.gz (パッケージ MySQL-client-5.0.45-tritonn.1.0.7 から) は、パッケージ mysql-5.0.22-2.1 からのファイルと競合して

エラーです。
なぜ??と思ったら、どうやら元から入っているのが削除できていなかったようです。

再度、パッケージ調査。


# rpm -qa | grep -i mysql
MySQL-python-1.2.1-1
mysql-5.0.22-2.1
perl-DBD-MySQL-3.0007-1.fc6
libdbi-dbd-mysql-0.8.1a-1.2.2
mysql-connector-odbc-3.51.12-2.2
php-mysql-5.1.6-12.el5

やっぱり削除できていません。

パッケージをバージョンまで指定して rpm -eしてみる。


# rpm -e mysql-5.0.22-2.1
エラー: 依存性の欠如:
 mysql は (インストール済み)MySQL-python-1.2.1-1.i386 に必要とされています
 mysql は (インストール済み)libdbi-dbd-mysql-0.8.1a-1.2.2.i386 に必要とされています

なんか依存関連のエラーです。とりあえず、pythonとか使ってないので、何も考えずに削除。


# rpm -e MySQL-python-1.2.1-1 libdbi-dbd-mysql-0.8.1a-1.2.2 mysql-5.0.22-2.1

で、確認


# rpm -qa | grep -i mysql
perl-DBD-MySQL-3.0007-1.fc6
mysql-connector-odbc-3.51.12-2.2
MySQL-shared-5.0.45-tritonn.1.0.7
php-mysql-5.1.6-12.el5

無事削除できたようです。


# rpm -ivh MySQL-client-5.0.45-tritonn.1.0.7.i386.rpm
準備中...                ########################################### [100%]
   1:MySQL-client           ########################################### [100%]

続いてserver


# rpm -ivh MySQL-server-5.0.45-tritonn.1.0.7.i386.rpm
準備中...                ########################################### [100%]
   1:MySQL-server           ########################################### [100%]
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h marudev.fact password 'new-password'
See the manual for more instructions.
Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at

http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com
Starting MySQL.[  OK  ]
Thank you for installing the MySQL Community Server! For Production
systems, we recommend MySQL Enterprise, which contains enterprise-ready
software, intelligent advisory services, and full production support with
scheduled service packs and more.  Visit www.mysql.com/enterprise for more
information.

無事、インストール完了したみたいです。
次に動作確認


# /etc/init.d/mysql start
Starting MySQL                                             [  OK  ]

# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.45-modified MySQL Community Server (GPL) (portions (c) Tritonn Project)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

ちゃんと「portions (c) Tritonn Project」と出てました。

show senna statusの確認もOKでした。


mysql> show senna status\\G
*************************** 1. row ***************************
                  Table: t1
               Key_name: fulltext_index
            Column_name: body
               Encoding: utf8
             Index_type: NGRAM
           Sectionalize: OFF
              Normalize: ON
            Split_alpha: OFF
            Split_digit: OFF
           Split_symbol: OFF
     Initial_n_segments: 512
        Senna_keys_size: 2
   Senna_keys_file_size: 8462336
     Senna_lexicon_size: 14
Senna_lexicon_file_size: 8462336
     Senna_inv_seg_size: 2265088
   Senna_inv_chunk_size: 135168
1 row in set (0.00 sec)

mysql>

初めてのTritonn(チュートリアル)を見ながら、少しいじってみました。
ちゃんと動いているみたいです。

全文検索というぐらいですから、データ元が無いと威力が発揮できません。
今後、仕事でも個人でも使う場面が出てくると思いますので、いろいろデータぶちこんで試していきたいと思います。

追記(2007-11-06)
Twitterで他の方が話していた内容ですが、日本語ではない場合には以下のようなエラーが起きるみたいです。


warning: user mir does not exist - using root warning: group mir does not exist - using root

追記2(2007-11-06)
rpmを作った時のユーザ情報等が入ってしまっているそうです。
回避方法がtritonn-dev MLで流れていましたので、リビルド版を追加/置換リリースするかもとのことでした。

configureは通ったので、makeしてみたところ、以下のようなエラーで落ちます。。

# make
(略)
../depcomp: line 512: exec: g++: not found
make[2]: *** [my_new.o] エラー 127
make[2]: Leaving directory `/home/maruta/mysql/mysql-5.0.45/mysys'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/maruta/mysql/mysql-5.0.45'
make: *** [all] エラー 2

g++が見つからないらしい。
g++というのを初めて聞きました。

ぐぐってみたところ、
「g++ は gcc に C++ を解釈するようにするオプションをつけてコールするスクリプトです。」というものらしいです。

ここは、困ったときのyum頼み。

# yum install g++

だめかなぁーと思いながらやったら、やっぱりダメでした。

で、何かが足りなくてg++に相当するものをインストールしなければならないか、もしくはパスを通してあげないといけないとういのはわかるので、
「yum g++」でググッてみたところ、Q&A掲示板っぽいところで、「yum install gcc-c++でインストールとか? 」というのを発見。

yum listで見てみたところ、それらしいパッケージがあります。
さっそく、インストール。

# yum install gcc-c++

再度、make挑戦。

・・・止まってしまいました。今度は違うエラー

# make
(略)
In file included from mysys_priv.h:16,
                 from my_new.cc:21:
../include/my_global.h:982: error: redeclaration of C++ built-in type `bool'
make[2]: *** [my_new.o] エラー 1
make[2]: Leaving directory `/home/maruta/mysql/mysql-5.0.45/mysys'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/maruta/mysql/mysql-5.0.45'
make: *** [all] エラー 2

まだ調査中。。。

追記
原因判明しました。mirさんありがとうございます!
続き>MySQLのソースを読んでみる[4] 通常インストール完了。ソースとご対面

タイトルが、MySQLのソースとなっているけど、まだまだそこにたどりつけていません。
ま、気長に。マイペースに。

いろいろMySQLのソースを見ていじっていく上で、
ソースを見る->ソースをいじる->動かしてみる という流れになると思います。
まずは、ソースからインストールをしてみないと話になりません。

普段、MySQLはrpmで入れています。
このBlogを動かしているサーバでは、めんどくさいのでyumでいれちゃいました。
ソースで入れたのは、今の会社に入社したときの研修で、ソースで入れようとして挫折し、先輩にrpmでいいよ と言われ、さくっといれた覚えがあります。
あまりソースから入れた記憶がありません。

で、とりあえずぐぐって、以下のドキュメントを参考にします。
MySQL4系だけど、5系でも一緒かなーということでやってみます。トライアンドエラーです。

http://dev.mysql.com/doc/refman/4.1/ja/quick-install.html

 MySQL ソースディストリビューションをインストールするために実行する必要のある基本的なコマンドは、以下のとおりです。

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> scripts/mysql_install_db
shell> chown -R root  /usr/local/mysql
shell> chown -R mysql /usr/local/mysql/var
shell> chgrp -R mysql /usr/local/mysql
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &

グループとユーザを作るのは問題ありません。
解凍も出来ています。
configureを動かしてみたところ、以下のようなエラーで止まってしまいます。

configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

まぁエラーを見ればわかりますが、Cのコンパイラが見つからんと言っています。
インストール時に開発ツールとかのチェックを忘れたのかもしれません。

で、これではなんにも出来ないので、gccを入れてみます。
まずは、存在確認

# which gcc
/usr/bin/which: no gcc in (/usr/kerberos/sbin:略)

やはり見つかりません。
なので、インストールしなければなりません。
落としてきて というのはめんどくさいので yumで入れちゃいます。

yum install gcc

yumって便利ー
でも、こういうのを裏を知らずに使ってると、スキルが伸び無そうな気がします。。

gccを入れてからconfigureしたら無事通りました。
なので、次はmake。

続き>MySQLのソースを読んでみる[3] makeがこける

MySQLのソースを読んでみるのしょっぱなとして、まずは環境が必要です。
手元に以下のような環境があったのでここで進めてみます。

Windows上のVMwareに CentOS4.4の以下をインストール。
CentOS-4.4.ServerCD-i386.iso
インストール時にMySQL、Apacheなどは除外しそれ以外は基本的にインストール。
Apacheが除かれているのは、仕事での環境が、Apache、phpはソースインストールなので、という理由です。

まずは、MySQLのソースを落としてきてみる。
MySQLの公式サイトからソースのリンクを探す。これが意外とわかりにくい。。
http://dev.mysql.com/downloads/mysql/5.0.html#source
Compressed GNU TAR archive (tar.gz) というtarボールを落としてきました。

で、それを解凍。
tarのオプションってなぜかいつもごっちゃになっちゃうんですよね~
helpして調べてから解凍。

$ tar -xzf mysql-5.0.45.tar.gz

わらわらディレクトリがあります。。。
まずは、普通にソースインストールしてみて、それからいろいろ見ていこうと思います。

あと、ソースを見るのに便利ということで、cscopeというソフトを教えてもらいました。
操作しているところを見せてもらったのですが、emacsと連動させてたので、真似してみようということで、emacs挑戦も同時にやってみます。
初期インストールで入っていなかったので、rootにsuしてから、yumでインストール。

# yum install emacs
# yum install cscope

で。。
emacsの使い方がわかりません。
終了方法もわからない。ま、気長に勉強します。

続き>MySQLのソースを読んでみる[2] gccが入ってない。。

昨日、会社にmir the tritonnの中の人が来てくれて、いろいろSennaやTritonnの話を聞きました。
wikipedia Senna
Tritonnプロジェクト

Tritonnとは、MySQLに全文検索エンジンSennaを利用可能にし、日本語の全文検索が出来るようにしようというプロジェクトです。
こちらの「Tritonnとは」を見ると、なぜMySQLで日本語の全文検索をするときに、組み込みのフルテキストインデックスではなく改造が必要なのかがよくわかります。
http://qwik.jp/tritonn/about.html

現在は、ソースで落とすことが出来ますが、rpm版もちょうど出来立てほやほやのを見せてもらいました。
rpm版のリリースは近々とのことなので楽しみです!

他にもMySQLのソースを読む方法などを教えてもらいました。
少しずつですが、ながめてみようと思い、VMwareにソースを落とそうとしたのですが、何を落としたらよくわからないので、とりあえず、Linux (non RPM packages) Linux (x86, glibc-2.2, “standard” is static) ってのを落としてみた。

http://dev.mysql.com/downloads/mysql/5.0.html#linux

追記。
解凍したらコンパイル済のファイルでした(笑)
下の方にSource downloadsってあった。

稼動中のサービスのDB操作。
これほど嫌なことは無い と思ってしまった。
スタートして1ヶ月ほどの auのとある公式サイトなのですが
FOMA版がそろそろスタートするので
統合したシステムにするために少しDBを変更する必要がありました。

カラム追加でalterしたり
テーブル追加でcreateしたり
データ追加でinsertしたり
データ変更でupdateしたり
etc…

もちろんテスト環境で何度も確認してるんだけど
万が一問題があった場合に dumpデータを復旧しなければならない。
胃が痛いのはその復旧時間。

テストサーバで試したら2時間以上かかる。
無停止で、せめて数分でという状況で2時間は痛すぎる。
ちなみにMySQLのInnoDBね
MyISAMならば、DB自体をリネームしちゃうって手もあるんだけど
そーもいかない。

社内の人たちにいろいろ聞き込み調査をしていたら、
これやってみれば?という助言をもらった。

SET AUTOCOMMIT=0;

>複数の変更処理を 1 つのトランザクションにまとめる。InnoDB は、データベースを変更するトランザクションがコミットされるたびにログをディスクにフラッシュする必要がある。一般にディスクの回転速度は最高でも 1 秒間に 167 回転(10000rpmの規格の物の場合)であるため、ディスクがオペレーティングシステムを欺かない限り、コミットの回数も同じく 1 秒間に 167 回に制限される。

だそうです。

こいつを無効にして、あとからcommitを自分でしてあげたら
なんとわずか6分で復旧テストが完了してしまった。
ちょっと拍子抜け(^^;

HDDへの書き込みがボトルネックになるというのは
あっちゃこっちゃで見るけれど、これほどとは。