MENU

J2EE環境構築編

J2EE体験編

J2EE環境構築編
MySQLのインストール(改訂版)

  • 日本語を正しく扱うためには、これまで紹介していた方法では不十分だったので、修正を加えました。
  • linuxでglibcにnptlを使った時に、うまくconfigureできない点の解決法を加えました。
  • mysqlの4.1.7が出ています。

ソースの入手、configure

データベースサーバとしてMySQLをインストールします。
なぜMySQLかといえば、makeした後に起動終了用のスクリプトが用意されて、ちょっと楽が出来る、というだけです。

ソースコードの入手

MySQLのサイト辺りからソースを入手しましょう。
同サイトでは「ソースを利用するのではなく、バイナリを利用することをお薦めする」という趣旨の記載がありますが、ここは自分のポリシーにしたがって、ソースを入手して手元でビルドしましょう。

展開、configure、make

tar zxfv mysql-4.1.7.tar.gz
cd mysql-4.1.7
CPPFLAGS="-D_GNU_SOURCE" ./configure --prefix=/usr/mysql --without-readline --with-charset=utf8 --with-extra-charsets=all --with-pthread --with-named-thread-libs=-lpthread
make

オプションが多くて目眩がしそうです。
--without-readlineはコンソールクライアントのmysqlに日本語を通させるために必要なオプションです。
具体的には

mysql -u root -p
password:********
select * from mytable where foo='小泉純一郎'

のような入力が可能になる、というものです。
もしも--without-readlineをつけたのに日本語入力ができない、というのであれば、readlineライブラリを作り直さなければなりません。
このあたりから辿ったり、Ring Server Projectから探したりして、ソースを入手して下さい。
configureにあたって--enable-multibyteを指定しておけば良いはずです。

--with-charset=utf8 --with-extra-charsets=allはマルチバイトの扱いについてのものです。
utf8を指定しているのはjavaを利用することを想定しているためですが、それだけでなく、文字コード変換時のトラブルをある程度予防できるらしいのでこうしました。
これだけだと、mysql(コンソールクライアントのことです)がutf8以外理解せず、コンソールからの操作が若干困難になるので、--with-extra-charsets=allを指定して、利用できる文字コードを増やしておきます。
こうしておくと、/etc/my.cnfに修正を加えることで文字コードの指定と自動変換が可能になります。
具体的な記述内容は、あとで説明します。

CPPFLAGS="-D_GNU_SOURCE" --with-pthread --with-named-thread-libs=-lpthreadは、glibcでnptlを利用している場合に必要です。
もしもlinuxthreadsを利用していれば必要ありません。
これは、configureスクリプトがlinuxのnptlをきちんと検出しない、という問題で、既に各方面で話題になっているようですが、まだ直っていません。
将来は正しく扱われることになるかもしれません。

configureを実行して、問題なく終了したら

make

を実行します。

make install

su
password:********
make install

makeがきちんと終了していればinstallも問題なく終了するでしょう。

設定

以上でバイナリはインストールされたのですが、データベースとして運用するためには若干の設定が必要です。
詳細はINSTALL-SOURCEに記載されてますが、ざっと列挙すると

groupadd mysql
useradd -g mysql mysql
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/mysql
bin/mysql_install_db --user=mysql
chown -R root  .
chown -R mysql var
chgrp -R mysql .
bin/mysqld_safe --user=mysql &;
bin/mysqladmin -u root password "NEWPWD"
cp support-files/mysql.server /etc/rc.d/init.d/

/etc/my.cnfの修正

既にMySQLのインストールはほぼ完了していますが、日本語を正しく扱うために/etc/my.cnfを修正します。
まず、[mysqld]に

default-character-set=utf8

を追加します。
次に、[mysql]に

default-character-set=ujis

を追加します。
これで、コンソールからeucで入力して、サーバ上のデータはutf8という環境が整います。

実験

想定どおりに動作しているか、実験してみましょう。
実験に用いるデータは郵便番号一覧が手頃で良いと思います。
データは全国版と各都道府県版がありますが、ここは自分の住む都道府県のものを取ってくるのが良いと思います。
というのも、emacsのhexl-modeで12万件に及ぶデータを読み込ませるのは時間がかかり過ぎて大変だからです。
もっと軽く動作する16進数エディタ(またはダンプツール)を利用している人は、全国版に挑戦して下さい。

ともかく、総務省のサイトからデータを取得します。
このファイルはcsv形式、ShiftJISで保存されています。改行は\r\nで、半角仮名を含みます。
utf8には半角仮名の割り当てもあったような気がしますが、念のために全角に変換しておきます。改行コードの変換、必要なデータの抽出など、少々の作業も行ないます。

まず、解凍します。拡張子を見て明らかなように、lhaを必要とします。
無い人はこのあたりから入手しましょう。

lha x ken_all.lzh

ken_all.csvができます。
catしたり16進数エディタで開いたりすれば分かりますが、余分なデータも含んでいます。
そこで、半角仮名を全角仮名に変換するだけでなく、余分なデータの除去も行ないます。

cat ken_all.csv|nkf --utf8|cut -f 3-9 -d ','>ken_all.mod.csv

これで、郵便番号と読み、漢字だけを抽出できました。
もしもnkfのバージョンが古いと、--utf8を理解できずにエラーになるかも知れません。
そのときはこの辺りから入手してインストールしましょう。

ようやくデータを準備できました。
次はテーブル定義です。

mysql -u root -p
password:******
create database zip_code;
use zip_code
create table zip_code (zip varchar(7),yomi_todoufuken varchar(255),yomi_shikuchouson varchar(255),yomi_chiku,todoufuken varchar(255),shikuchouson varchar(255),chiku varchar(255));
load data infile '/tmp/download/ken_all.mod.csv' into table zip_code fields terminated by "," enclosed by '"';

これでデータを格納できました。
確認のために、自分の住所(杉並区など)を検索してみて下さい。
正しく表示されたら、今度は/usr/mysql/var/zip_codeへ移動してzip_code.MYDを16進数エディタで表示してみましょう。

su
password:******
cd /usr/mysql/var/zip_code
emacs zip_code.MYD(など)

ファイルの中身を調べると、utf8で格納されていることが分かると思います。

実験その2

テーブル定義でvarchar()の替わりにtextを使うと、検索がちょっと早くなります。
そのかわり(?)データベースの大きさがちょっと大きくなります。
ただ、この程度の高速化なら、インデックスを使った方が圧倒的に早くなるので、インデックスを張るべきでしょう。
もちろん、インデックス用のディスク領域と、インデックス作成作業用のディスク領域は結構馬鹿にならない大きさですので、シビアに容量を計算していた場合には、インデックスを利用できないことも考えられます。
事情が許すのであれば、ある程度余裕をもったハードウェア構成にしておきましょう。

JDBC-Connector

MySQL自体のインストールは完了していますが、J2EE環境に利用するためにはJDBC-Connectorが必要です。
根性があれば自力で連携させることもできるかも知れませんが、私は根性がないので素直にJDBC-Connectorを利用します。
これもMySQLのサイトから入手できます。近所のミラーを選んでくれるので、入手しましょう。現時点では3.0.16-gaが最新のバージョンのようです。
解凍すると、mysql-connector-java-3.0.16-gaディレクトリにmysql-connector-java-3.0.16-ga-bin.jarというファイルがあるのでこれを適当なディレクトリにコピーします。

cp mysql-connector-java-3.0.16-ga-bin.jar $JBOSS_ROOT/server/default/lib

libディレクトリはJBOSS_ROOT/libもあって、どちらでも良いような気もしますが、こっちが良いらしいのでこっちにしておきます。

できあがり

これで終了です。
mysql.serverを/etc/rc.d/init.dにコピーしたので、マシンの起動時にMySQLが起動し、マシンのシャットダウン時にMySQLも終了します。
設定項目の詳細の意味を知りたければINSTALL-SOURCE、manを読んで、google先生に聞いてください。