MySQL 4.1 on Fedora Core 5

Fedora Core 5 では MySQL 5 が標準になります。これを MySQL 4.1 と共存させるにはどうすれば良いのでしょうか? Fedora Core 5 の MySQL 5 では基本的に/etc/my.cnf を参照するのでこちらを変更することはできません。その点に注意をしながらMySQL4.1をソースからインストールして共存をしてみました。

インストールしたMySQL4が/etc/my.cnf を読み込まないように、/etc/my.cnf をいったんリネームしておきます。MySQL5を起動している場合は、あらかじめ停止しておく必要があります。

# service mysqld stop
# mv /etc/my.cnf /etc/my.cnf.original

コンパイルにあたって、configure では次を指定します。「–with-tcp-port」の値は使っていないポート番号ならどれでもかまいません。なお、クラスタを使いたい場合はポート番号を重ねないように –with-ndb-portや–with-ndb-port-base も指定した方がいいかもしれません。

# ./configure \
 --prefix=/usr/local/mysql \
 --with-charset=utf8 \
 --with-extra-charsets=all \
 --with-mysql-user=mysql \
 --with-tcp-port=13306 \
 --with-unix-socket-path=/usr/local/mysql/var/mysql.sock

これをインストールします。mysql_install_db では初期データベースをインストールしています。また、ディレクトリ権限の変更もしています。

# make
# make install
# ./scripts/mysql_install_db
# chown -R root /usr/local/mysql
# chown -R mysql /usr/local/mysql/var
# chgrp -R mysql /usr/local/mysql

/usr/local/mysql/var/my.cnf ファイルを下記のように作成します。サーバのポート番号はここで指定します。

[mysqld]
datadir=/usr/local/mysql/var
socket=/usr/local/mysql/var/mysql.sock
port=13306
old_passwords=1

[mysql.server]
user=mysql
basedir=/usr/local/mysql

[mysqld_safe]
log-error=/usr/local/mysql/var/log.err
pid-file=/usr/local/mysql/var/mysqld.pid

この状態で起動して、動作確認と環境変数を確認しておきます。/usr/local/mysql/var に mysql.sock、log.err、mysqld.pid があれば基本的には大丈夫です。もし、これらのファイルがない場合は「/usr/local/mysql/bin/mysqladmin –help」の出力結果をよくみて my.cnf をどこへおけばいいのか確認をしてください。

# /usr/local/mysql/bin/mysqld_safe &
# /usr/local/mysql/bin/mysqladmin version
# /usr/local/mysql/bin/mysqladmin --help
# /usr/local/mysql/bin/mysqladmin variables
# /usr/local/mysql/bin/mysqladmin -u root shutdown

シャットダウン権限を持つデータベースユーザとしてmysqlを登録します。また、現在登録されているユーザについても確認をしておきます。パスワードが設定されていないユーザについてはパスワードを設定し、パスワードが設定されていないユーザについては登録解除しておくのが良いでしょう(ここではそれらの作業は省略)。最後に、mysqlユーザでシャットダウンができることを確認しています。

# /usr/local/mysql/bin/mysqld_safe &
# /usr/local/mysql/bin/mysql -u root
mysql> grant shutdown on *.* to mysql@localhost;
mysql> flush privileges;
mysql> select Host, User, Password from mysql.user;
mysql> quit;
# /usr/local/mysql/bin/mysqladmin -u mysql shutdown

MySQL4の/etc/my.cnf を元に戻した状態で、MySQL4がただしく起動するか確認します。起動した場合に、「/usr/local/mysql/var/my.cnf」で指定した変数が有効になっているか確認します。これは念のための作業になりますが、ここで「/etc/my.cnf」で指定されている変数が有効になっている場合は、インストールがうまくできていません。インストール手順、設定を確認してください。

# mv /etc/my.cnf.original /etc/my.cnf 
# /usr/local/mysql/bin/mysqld_safe &
# /usr/local/mysql/bin/mysqladmin variables
# /usr/local/mysql/bin/mysqladmin -u root shutdown

MySQL5を起動します。

# service mysqld start

MySQL4を起動して、MySQL5といっしょに起動することを確認します。/usr/local/mysql/bin/mysqladminを実行するとMySQL4の方へアクセスし、mysqladmin(/usr/bin/mysqladmin)の方を実行するとMySQL5の方へアクセスします。両方とも停止してエラーが発生しないことを確認します。

# service mysqld start
# /usr/local/mysql/bin/mysqld_safe &
# /usr/local/mysql/bin/mysqladmin variables
# mysqladmin variables
# service mysqld stop
# /usr/local/mysql/bin/mysqladmin -u mysql shutdown

MySQL4用の起動スクリプトを用意します。

# vi /etc/rc.d/init.d/mysqld4

内容は下記の通りです。

#!/bin/bash
# chkconfig: 345 80 20
# description:  MySQL4 database server.
# processname: mysql4
# pidfile: /usr/local/mysql/var/mysqld.pid

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

start(){
        su -s /bin/bash - mysql -c "/usr/local/mysql/bin/mysqld_safe --user mysql \
--default-character-set=utf8 --max_user_connections=20 &"
}

stop(){
        su -s /bin/bash -mysql -c "/usr/local/mysql/bin/mysqladmin -u mysql shutdown"
}

case "$1" in
  start)    start    ;;
  stop)    stop    ;;
  status)    ;;
  restart)   stop;start  ;;
  condrestart)    stop;start    ;;
  *)
    echo "Usage: $0 {start|stop|status|condrestart|restart}"
    exit 1;;
esac

編集した自動起動スクリプトを登録し、実際に登録できていることを確認します。

# chkconfig --add mysqld4
# chkconfig --level 345 mysqld4 on
# chkconfig --list mysqld4
mysql           0:on    1:off   2:off   3:on    4:on    5:on    6:off

動作の確認をします。

# service mysqld4 start
# /usr/local/mysql/bin/mysql -u root
mysql> status;

注意点としては、/etc/my.cnf で設定を追加する時には、/usr/local/mysql/var/my.cnf へも設定を追加しないと、MySQL4へのその設定が反映されてしまうという点です。両方とも同じ設定にしたい項目についてはいいのですが、別々にしたい場合にはあらかじめmysqladminコマンドを使って変数の値を確認をして設定をするようにします。

同じカテゴリの記事: Linux