このエントリーをはてなブックマークに追加
スポンサーリンク

MySQLのインストール

ソースの入手

本家サイト
http://dev.mysql.com/downloads/mysql/5.0.html
から、5.0系の最新のソース一式を取得します。

コンパイル済みのrpmもいくつか用意されていますが、今回はソースをコンパイルして生成しましょう。

コンパイル&インストール

MySQLを実行させるユーザーを追加します。
useradd mysql

ソースを展開して、コンパイル&インストールします。バージョン番号は都度読み替えてください。
tar xvzf mysql-5.0.22.tar.gz
cd mysql-5.0.22
./configure --with-charset=sjis --with-extra-charsets=all --with-mysqld-user=mysql
make
make install

設定ファイルの雛型をコピーします。
cp support-files/my-medium.cnf /etc/my.cnf

ライブラリにパスを通します。
vi /etc/ld.so.conf.d/mysql.conf
/usr/local/lib/mysql
ldconfig

DBを初期化します。
mysql_install_db --user=mysql

MySQL起動スクリプト作成

RedHat系(Enterprise、CentOS含む)では、PostgreSQLの時と同様に、起動スクリプトを/etc/rc.d/init.d/に作成します。Mysqlにはmysql.serverという起動スクリプトが用意されていますので、これを呼び出すようにします。

vi /etc/rc.d/init.d/mysql
#!/bin/bash
#
#       /etc/rc.d/init.d/mysql
#
# Starts the at daemon
#
# chkconfig: 345 95 5
# description: Runs commands scheduled by the at command at the time \
#    specified when at was run, and runs batch commands when the load \
#    average is low enough.
# processname: mysql

# Source function library.
. /etc/init.d/functions

RETVAL=0

start() {
        /usr/local/share/mysql/mysql.server start
}

stop() {
        /usr/local/share/mysql/mysql.server stop
}

restart() {
        /usr/local/share/mysql/mysql.server restart
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        restart
        ;;
  *)
        echo "Usage: mysql {start|stop|restart|reload}"
        exit 1
esac

exit $RETVAL
実行権限をつけます。
chmod 755 /etc/rc.d/init.d/mysql

サーバーの起動時に起動するようにします。
chkconfig mysql on

・MySQL起動
/etc/rc.d/init.d/mysql start

これでMySQLは起動します・・・って、しないかもしれません。コンパイル時に英文字でゴチャゴチャと文字がたくさんスクロールした場合、大抵の日本人は読み飛ばすものですが、コンパイル終了時に英文字で、最初の1回目は起動スクリプトを使わずに、手動で常駐させるように指示が出ていると思います。そこで、手動で常駐させてみます。

/usr/local/bin/mysqld_safe &
これでMySQLが常駐したと思います。

ps ax | grep mysql

常駐を確認したら、起動スクリプトで再スタートしてみましょう。
/etc/rc.d/init.d/mysql stop
(少し待つ)
/etc/rc.d/init.d/mysql start

ルートパスワード設定

ルートパスワードがなければmysqlとコマンドを入れると誰でもMySQLにログインできます。それじゃ困るという場合は、ルートパスワードを設定します。

mysql
mysql>set password for root@localhost=old_password('ルートパスワード');

これで、mysqlにログインする際に、
mysql -uroot -hlocalhsot -p'パスワード'
という風にパスワードが必要になります。また、単に-pだけをつけるとパスワードは別に聞いてきます。bashのヒストリーにパスワードが残っちゃ困るという場合は、この方法でパスワードを入れてください。

ユーザー追加

mysql
mysql>grant all on DB名.テーブル名 TO (ユーザー名);

grantはもともと権限を与えるコマンドですが、ユーザー名のところに新規のユーザー名を指定する事で、ユーザーを追加する事ができます。DB名、テーブル名には、ワイルドカード(*)を使う事ができます。つまり、 *.*とする事で、全てのDB、全てのテーブルという意味になります。

ユーザーのパスワードもrootと同様に指定します。ただし、注意しなければならないのは、MySQLのパスワードはバージョン4.0から暗号化のアルゴリズムが変更になったのですが、 old_passwordと指定して旧方式で格納しないとPHPが対応しません(少なくともこの文を書いてる時点では)。
mysql>set password for (ユーザー名)@localhost=old_password('パスワード');

データーベースの作成

DBを作る時は
create database DB名 default character set sjis;

ここで、キャラクターセットはsjisとしましたが、あらかじめ/etc/my.cnfに、
[mysqld]
default-character-set=sjis
とすると、無指定の場合にsjisが標準になります。

携帯サイト等で絵文字を扱いたい場合は、sjisではなくcp932と指定しないと絵文字の部分が?になってしまうので注意してください。

端末の文字コード

端末の文字コードは/etc/my.cnfに
[client]
default-character-set=sjis
と指定しておくと、標準でsjisになります。無指定の場合はlatin1とみなされてしまいます。その場合でも、ログイン後、
mysql>set names sjis;
とする事で端末文字コードを指定する事もできます。

端末の文字コードは正しく設定しなければなりません。もし、端末の文字コードの設定を誤ると、未知の文字と解釈されたコードは、全て?に変換されてしまうため、日本語の文書などは???????? と、ひたすら?ばっかりの文字列が記録されてしまうと思います。

ログの管理

ログの出力先を、RedHat系標準の場所に変更してみましょう。

mkdir /var/log/mysql
chown mysql.mysql /var/log/mysql

vi /etc/my.cnf
[mysqld]
log = /var/log/mysql/mysql.log
log-error = /var/log/mysql/mysql-error.log
log-slow-queries = /var/log/mysql/mysql-slow.log
これで、MySQLの動作ログが、RedHat系標準の/var/log/に記録されるようになったと思います。そしたら、logrotateを使ってローテーションの指定をします。

vi /etc/logrotated.d/mysql
/var/log/mysql/*log {
        create 660 mysql mysql
        missingok
        sharedscripts
        postrotate
          /usr/local/bin/mysqladmin -uroot -p'ルートパスワード' -hlocalhost flush-logs
        endscript
}
ここで、mysqladminコマンドのflush-logsパラメーターを利用してログ記録のリスタートを指定しています。

エラーがない事を確認します。
logrotate -d /etc/logrotate.conf

ここまで設定したら、mysqlをリスタートします。
/etc/rc.d/init.d/mysql restart
スポンサーリンク