第1部 構築編

本番運用に向けて

MySQL 構築

さて、次はデータベース MySQL をインストールする。

前にも書いたが、MySQLオープンソースで開発されているリレーショナルデータベースだ。
MySQL の特徴はとにかく速度堅牢性を重要視して作られていること。
インストールも簡単で、運用も実に容易い、何より助かるのがデータベースのバックアップのしやすさにある。
コマンドひとつでデータベースの作成から、テーブルの構築、そこに記録されていたレコードの復元を一気にこなす SQL を作れたりするので、Linux で動いている本番サーバから WindowsNT で動いているテストサーバにデータをそっくりそのまま移送するなんて面倒な作業も、ものの 5 分で終了してしまうのだ。

事実、Linux サーバでデータベースを SQL 変換して、FTP 経由で持ってきて、WindowsNT の MySQL に突っ込むのに 5 分だった

その代わり Oracle や DB2 等の商用データベースに見られる冗長的とも言える高機能とは完全に手を切っていて、ロールバックやコミットといったトランザクション処理が標準ではサポートされない
副問い合わせも使えないし、グラフィカルな設定ツールもない。
しかしそれを乗り越えられる少しばかりの根性設計があれば、MySQL はとてつもなく強い味方になるのだ。

んで、今回構築している LAMP プラットフォームの WEB データベースサーバの一角を担っているわけだね。

前置きはこの程度にして、インストールを行う。
前回は解説書に付いていた 3.23.49 をインストールしたのだが、今回は最新版を持ってこよう。

MySQL の総本山である http://www.mysql.com/ に行ってみる。
と、Downloads という表示があるのでクリックする。
んで、MySQL 3.23 というリンクをクリックしよう。

ちなみに、MySQL 3.23 と書かれている横に“Stable release”と書かれているが、これは安定版、ということだ。
MySQL は最初に alpha 版が出る。
これは開発中と言う意味で、機能の取り込みを行っている最中だ。
運用目的なら手を出してはならない。
んで beta 版、機能の取り込みを停止してバグ取りに専念しているバージョンだ。
更に gamma 版、言わばバグが取れた状態だな。
そして最後の“Stable release”、安定版という意味で、gamma 版が問題なく動き続けた場合に安定宣言としてリリースされる。
つまり運用目的ならば“Stable release”が最良の選択肢だというわけだな。

というわけで、MySQL 3.23 の最新“Stable release”を手にいよう。
ダウンロード形式に色々とあるが、一番下まで行って Source download からダウンロードする。
この日記を書いている時点での最新の MySQL ソースは mysql-3.23.54a.tar.gz だな。
早速ダウンロードだ。

んで、ダウンロードしたファイルを FTP で /home/******** にコピーする。
SSH でログインして、早速インストール開始だ。

$ su
Password: ????????
# mkdir /usr/local/src/mysql
# mv mysql-3.23.54a.tar.gz /usr/local/src/mysql/
# cd /usr/local/src/mysql/
# tar -xzf mysql-3.23.54a.tar.gz

こで、/usr/local/src/mysql/ に mysql-3.23.54a というディレクトリが作成されて、その下にソースが展開された筈だ。
ソースが展開されたディレクトリに移動して、今度はコンパイルを開始する。
………んと、その前にユーザを作ろう
MySQL を mysql グループに属する mysql ユーザによって実行されるようにしたい、グループを作ってユーザを登録する。
mysql ユーザではログインする必要はないので、useradd に -M オプションを付けてホームディレクトリも作らないでおこう。
更にログイン出来ないようにシェルに /sbin/nologin を指定する。
取り敢えずサーバ実機のコンソールを直接操作して、ユーザを作ってしまう。

# groupadd mysql
# useradd mysql -g mysql -M -s /sbin/nologin

んで、極々普通に configure スクリプトを実行する。

# ./configure --prefix=/usr/local/mysql --with-charset=ujis --with-extra-charsets=all --with-mysqld-user=mysql

お試しインストールではパラメータに関して専門書籍に譲ってしまったが、こちらでは一通りは書いておこう。
--prefix=/usr/local/mysql では MySQL 本体をインストールする先を指定する。
なんでも指定を省略すると /usr/local という中途半端な位置にインストールされるらしいので、明示的に指定してしまう。
--with-charset=ujis で文字コードを EUC-jp にする。
UNIX 系で日本語を扱う場合、原則として EUC-jp だ、Shift JIS は正確な認識がないと大変なことになる。
--with-extra-charsets=all を指定すると起動時に文字コードを変えられるようになるらしい。
一応付けておくが、利用することはないだろう。
--with-mysqld-user=mysql で MySQL 起動時のユーザを指定するので、先ほど作った mysql を指定する。
その他にもデータベースファイルの保存先の指定などもあるが、オミットした。

続いて、コンパイル、及びインストール。
ちなみに MySQL のコンパイルは Xeon 2.0GHz の Dual をもってしても結構かかるので、気長に待とう………

# make
# make install

何というか、元々 C 言語系で構文解析とコンパイルに時間のかかる言語仕様だよなぁ~
Pascal 系だと速いコンパイラが作りやすいけど………

さて、最後に初期設定をする。
ここでこの日記を読んでくれている人に謝らなければならない
お試しで MySQL をインストールした際、この後の初期化で /usr/local/mysql/bin/mysql_install_db を使用したが、別所で MySQL をインストールする際にこれを実行しても正常にインストールされなかった。
MySQL の総本山で書かれていたインストール方法を参照すると、どうやら間違っていたらしい。
正しくは、ソースのディレクトリから移動せずに以下のコマンドを実行する

# scripts/mysql_install_db

そして、MySQL をインストールしたディレクトリの下にある /usr/local/mysql/var のオーナーを変更する。

# chown -R mysql /usr/local/mysql/var/

さらに、/usr/local/mysql 以下のグループを mysql に変更してしまう。

# chgrp -R mysql /usr/local/mysql/

これで最低限の設定は完了だ。
次に起動スクリプトを設定して、Linux の起動と同時に MySQL が起動するようにしてしまう。
前回の日記で Apache を自動起動設定した際と、方法は全く同じだ。
MySQL の起動スクリプトは /usr/local/mysql/share/mysql/mysql.server なので、これを /etc/init.d ディレクトリに mysqld という名前でコピーする。

# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld

さらに、ランレベル 3 とランレベル 0 にそれぞれシンボリックリンクを追加だ。

# cd /etc/rc3.d
# ln -s /etc/init.d/mysqld S99mysqld
# cd /etc/rc0.d
# ln -s /etc/init.d/mysqld K10mysqld

んじゃ、起動してみよう。

# /etc/init.d/mysqld start

相変わらずコンソールへの戻りが変だが、正常に起動はしたらしい。
ためしに以下のコマンドでプロセスを見てみると、

# ps -aux | grep mysql

以下のような結果が得られて、MySQL が起動していることが確認された。

mysql    31815  0.0  0.1 12084 1832 pts/0    S    21:35   0:00 /usr/local/mysql/
mysql    31817  0.0  0.1 12084 1832 pts/0    S    21:35   0:00 /usr/local/mysql/
mysql    31818  0.0  0.1 12084 1832 pts/0    S    21:35   0:00 /usr/local/mysql/

んで、接続確認。

# /usr/local/mysql/bin/mysql -u root

正常に接続出来たようだ。
なので、取り敢えずセキュリティを確保しておこう。
MySQL をインストールした直後に出来ている root ユーザは、MySQL の全てに対して権限を持っている強力なユーザだ。
しかしながらパスワードが設定されていないので、設定してしまう。

mysql> set password for root=password('????????');
mysql> flush privileges;

しかし、相変わらず最初から出来ている localhost の root と、サーバのホスト名の root の片方しかパスワードが設定されないな………
仕方ないので、SQL 文で強制的に突っ込む。

mysql> update user set Password=password('????????') where User='root';
mysql> flush privileges;

更に、どういうつもりか最初から出来ている無名ユーザも容赦なく削除

mysql> delete from user where User='';
mysql> flush privileges;

んで、いったん MySQL クライアントを終了して、もう一度ログインを試行してみる。

# /usr/local/mysql/bin/mysql -u root

すると以下のように怒られるはずだ。

ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)

んで、次は以下のように入れて、パスワードを入力してログインしてみよう。

# /usr/local/mysql/bin/mysql -u root -p

見事に成功。
これで、MySQL の最低限のインストールも完了したわけだ。

ちなみに、このままだと root ユーザは MySQL がインストールされているサーバ本体から直接接続しない限りはログインが認められない状態にある。
ネットワークに繋がっているその他の端末から接続したい場合、ユーザの接続元条件をやや緩和しなければならない。
ま、今回はそこまで言及せず、インストールと実行が出来ただけでよしとしよう。
実際に LAMP サーバでの開発が始まったら嫌でも設定しなければならないんだから………

さて、余談だが………
今使った MySQL クライアント、起動するのにいちいち………

$ /usr/local/mysql/bin/mysql -u root -p

などとフルパスで指定していたら面倒だ。
なので、パスを通してしまおう。
Red Hat Linux は標準のシェルは bash が使われているので、bash のユーザ毎の設定ファイルを書き換えてしまう。
パスを通したいユーザのホームディレクトリにある .bashrc ファイルに以下の行を追加する。

$PATH=$PATH:/usr/local/mysql/bin

これでログオン時より、MySQL クライアントのあるパスがサーチパスに追加されるので、フルパスで打たなくても呼び出せるようになる。

Valid HTML 4.01 Strict Valid CSS!