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コマンドを使って変数の値を確認をして設定をするようにします。