作成開始 : 平成20年08月02日(土)  最終更新 : 平成20年09月19日(金) 

MySQL 5.0 を試す


PC-9821Xc13 では PostgreSQL を使って phpBB2 を運営していましたが、MySQL の方が対応している CMS などのスクリプトが多いようなので Armda に思い切って導入することにしました。
やっぱりソースからのインストールです。
作業は全て root で実施しました。


1.ソースの準備

MySQL :: The world's most popular open source database にある MySQL :: MySQL Downloads からダウンロードします。
現在 phpMyAdmin がサポートしている Compressed GNU TAR archive (tar.gz) -> mysql-5.0.51b.tar.gz  26.5Mbyte をダウンロードしました。

2.MySQL専用ユーザを作成

groupadd mysql
adduser -g mysql mysql
・・・・・・とかするんでしょうけど私は sysinstall を使って作成しました。

3.ソースファイルのアップロードと展開

ディレクトリ : (例によって) /usr/local/src
tar xvfz mysql-5.0.51b.tar.gz で展開します。(展開したら mysql-5.0.51b.tar.gz は削除しました。)

4.インストール

カレントディレクトリを /usr/local/src/mysql-5.0.51b に移動します。
まずは Configure ですが、オプションは ./configure --help で確認できます。
./configure --with-charset=ujis --with-extra-charsets=all --with-mysqld-user=mysql --localstatedir=/usr2/mysql/data
各オプションは 「\」で区切って指定も可能です。
--with-charset=ujis -> デフォルトの文字コードをEUCに設定
--with-extra-charsets=all -> デフォルト以外の文字コードもサポートする
--with-mysqld-user=mysql -> MySQLデーモン起動のユーザー設定
--localstatedir=/usr2/mysql/data -> データディレクトリの指定
最後に Thank you for choosing MySQL! ・・・・と表示されればOKのようです。
そして make です。 ・・・・・ ここは超々低スペックなので 2時間 くらいかかりました。
最後に make install です。 ・・・・・ ここはすぐに終わりました。

 ↑
んーーーー、configure で --prefix=/usr/local/mysql した方がよかったかな?
やっぱりディレクトリ構造が気に入らなかったので /usr/local/src/mysql-5.0.51bmake uninstall しました。
そして、・・・・・
./configure --prefix=/usr/local/mysql --with-charset=ujis --with-extra-charsets=all --with-mysqld-user=mysql --localstatedir=/usr2/mysql/data
・・・・しました。(各オプションは 「\」で区切って指定も可能です。)
make
make install

  ↑
あれ? 全部入らないや・・・・続きは下のとおりです。

Making install in server-tools
Making install in instance-manager
test -z "/usr/local/mysql/libexec" || mkdir -p -- "/usr/local/mysql/libexec"
/bin/sh ../../libtool --preserve-dup-deps --mode=install /usr/bin/install -c '
mysqlmanager' '/usr/local/mysql/libexec/mysqlmanager'
/usr/bin/install -c mysqlmanager /usr/local/mysql/libexec/mysqlmanager
Armada#
※タイムスタンプとディレクトリ空を頼りに以下を削除しました。(前回 make install の残骸?)
/usr/local/include/mysql
/usr/local/info
/usr/local/lib/mysql
/usr/local/libexec
/usr/local/man

5.データベースの初期化

./scripts/mysql_install_db --user=mysql でデータベースを初期化します。
データディレクトリを別途設定する場合は、オプションで --datadir=/var/mysql/data を追加します。・・・とのことですが、今回は configre のオプションで /usr2/mysal/data と指定しました。 vi で mysql_install_db を見たらその記述が反映されていました。
ところが ・・・・
FATAL ERROR: Could not find /usr/local/bin/my_print_defaults

If you are using a binary release, you must run this script from
within the directory the archive extracted into. If you compiled
MySQL yourself you must run 'make install' first.
とのことでした。make uninstall して --prefix=/usr/local/mysql を足して configure して make, makeinstall しからだろうか?
で、find / -name my_print_defaults したら /usr/local/mysql/bin/my_print_defaults にありました。
もしかしたら、make uninstall して /usr/local/src/mysql-5.0.51b 以下を削除し mysql-5.0.51b.tar.gz を展開してやった方がよかったかな?
とりあえず< ./scripts/mysql_install_dbvi で開いてみました。どうも basedir を与えてやればいいみたい。なので!
./scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql
・・・としたら・・・
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h Armada.takaq.jp password 'new-passwor
d'

Alternatively you can run:
/usr/local/mysql/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/local/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

  ↑
Ok なのかな?
おぉ、OKです。データディレクトリに指定した /usr2/mysql/data 下に mysql、test が出来ていました。

6.データディレクトリのパーミッション設定

データディレクトリ以下の所有者をmysqlに変更します。
chown -R mysql /usr2/mysql/data
chgrp -R mysql /usr2/mysql/data

7.MySQLの起動確認

カレントディレクトリを /usr/local/mysql にします。
(ここで実行しないとエラーになります。どうやら環境変数 PWD で basedir を取得しているみたいです。)
/usr/local/mysql/bin/mysqld_safe --user=mysql & で起動します。
/usr/local/mysql/bin/mysqld_safe --user=mysql &
[1] 156
Armada# Starting mysqld daemon with databases from /usr2/mysql/data

  ↑
こうなるとOKみたいです。
/usr/local/mysql/bin/mysqlshow で確認してみましょう。
+--------------------+
| Databases          |
+--------------------+
| information_schema    |
| mysql             |
| test              |
+--------------------+

  ↑
  OKですね。

8.初期ユーザの設定

カレントディレクトリは /usr/local/mysql です。
MySQLを起動した状態で実行します。
インストールしたばかりのMySQLではrootユーザーが作成されています。
rootユーザーのパスワードは設定されていないので、まずは rootユーザー のパスワードを 設定します。
設定はデータベースに接続して行います。
データベースへの接続

mysql -u ユーザーID -p データベース名
初回なので ./bin/mysql -u root -p mysql とします。

  ↑
パスワードをきいてきますがまだ設定していないので「Enter」です。
SELECT host,user,password from user; でユーザーを確認してみましょう。

  ↑
こんなふうに確認できます。
では、root のパスワードを設定しましょう。方法は何通りかありますが、次のを使ってみます。
SET PASSWORD FOR root@localhost=PASSWORD('new_password');

  ↑
おぉ、設定できましたね。
一度 MySQLを抜けて、再度接続してみます。切断は 「\q」,「exit」,「quit」,[Ctrl]+[D] とかでできます。
設定したパスワードで接続できたらOKです。

9.自動起動の設定

カレントディレクトリはまだ /usr/local/mysql です。
/usr/local/mysql/share/mysql/mysql.server/usr/local/etc/rc.dmysql.server.sh という名前でコピーします。
cp ./share/mysql/mysql.server ../etc/rc.d/mysql.server.sh
[MySQLマニュアルより引用]

mysql.server は、サーバを起動する前にディレクトリを MySQL インストールディレクトリに変更してから、mysqld_safe を起動します。 インストールしたバイナリディストリビューションが標準以外の場所にある場合は、mysql.server を編集する必要があります。mysqld_safe を実行する前に適切なディレクトリに変更する(cd)ように、mysql.server を修正します。
サーバを特定のユーザとして実行する場合は、このセクションで説明するように適切な user 行を /etc/my.cnf ファイルに追加します。
vi/usr/local/etc/rc.d/mysql.sever.sh を開き、46行目あたりにある以下を編集します。
basedir=  → basedir=/usr/local/mysql
datadir=  → datadir=/usr2/mysql/data
そして、sh /usr/local/etc/rc.d/mysql.server.sh start で起動してみます。

 ↑
動きましたね。top で見ると。

  ↑
動いています。
sh /usr/local/etc/rc.d/mysql.server.sh stop で止めてみましょう。

  ↑
止まりましたね。
あとはリブートして自動で起動していたらOKですね。

10.MySQLのチューニング

カレントディレクトリはまだ /usr/local/mysql です。
MySQLは初期設定ですと、メモリの割り当て等の環境設定が何もされていません。そこでサンプルで用意されているファイルを使って、MySQLをチューニングします。
サンプルのファイルは・・・・ /usr/local/mysql/share/mysql にある以下のファイルです。
my-small.cnf
my-medium.cnf
my-large.cnf
my-huge.cnf
my-innodb-heavy-4G.cnf

このファイルを目的に合わせて、/etc/my.cnf として保存します。それぞれの内容は次のとおりです。これらのファイルはシステム最適化のベースとして使用できます。

ファイル名

使用用途

my-small.cnf

64MB以下のメモリを搭載したPC

my-medium.cnf

128MB以下のメモリを搭載したPC

my-large.cnf

512MB以下のメモリを搭載したPC

my-huge.cnf

1GB〜2GB以下のメモリを搭載したPC

my-innodb-heavy-4G.cnf

4GBのメモリとInnoDBで作成されたデータベースによって構築されたPC

私のところは超々低スペックなので my-small.cnf ですね。では、これを my.cnf として /etc にコピーすることにします。

cp ./share/mysql/my-small.cnf /etc/my.cnf

では、MySQL を再起動してみましょう。

sh /usr/local/etc/rc.d/mysql.server.sh stop で止めて・・・・

sh /usr/local/etc/rc.d/mysql.server.sh start で起動します。 top で見てみましょう。


  ↑
少し小さくなったかな?

また、my.cnf は次のようなパフォーマンス調整もできます。これらはパフォーマンスに影響されるため、データベース運用の目的に合わせて動作確認しながらチューニングする必要があるとのことです。私のところは超々低スペックなので小さい方に調整しないといけないみたいです。

(注)ディフォルトのパラメータは mysqld --help で確認できます。このコマンドによって、mysqld オプションと設定可能な変数すべての一覧が生成されます。この出力には、デフォルトの変数値も記載されています。

MySQLはデフォルトオプションを以下のファイルから読み取ります。(私の環境にあわせて書いています)

[MySQL リファレンス・マニュアルより引用]

ファイル名 用途
/etc/my.cnf グローバルオプション
/usr2/mysql/data/my.cnf サーバ固有オプション
defaults-extra-file --defaults-extra-file=path で指定されたファイル
~/.my.cnf ユーザ固有オプション

[MySQL リファレンス・マニュアルより引用]

MySQL は、オプション設定ファイルを上記の順序で読み取ろうとします。複数のオプション設定ファイルが存在する場合、後で読み取られたファイルに指定されているオプションの方が、先に読み取られたファイル内の同一オプションより優先されます。コマンドラインで指定されたオプションは、オプション設定ファイルで指定されたオプションよりも優先されます。オプションによっては、環境変数を使用して指定できるものもあります。 コマンドラインまたはオプション設定ファイルで指定されたオプションの方が、環境変数値よりも優先されます。

・・・なので /etc/my.cnf は「全体に共通のオプション」として扱われます。


平成20年09月19日(金) 追記

キャラクタセットを UTF-8 にしてみました。
configureのパラメータで ujis を指定してコンパイルしていましたが、UTF-8 対応のスクリプトとか使うと文字化けが発生してしまうからです。
・現環境の確認
次のとおりです。
・UTF-8 への設定
/etc/my.cnf に下記を追記して MySQLを再起動しました。
[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
・実施後の確認
今回はまだ ujis でDatabaseを作成していなかったのでこれでいいのですが、もし ujis で既存のDatabaseがあった時は、データを dump して データベースを作り直し dump したデータを load する必要があるようです。
文字コードは Database ごとに持っているからです。

戻る

サイトトップへ