パンダのメモ帳

技術系のネタをゆるゆると

MySQL 4.1 と MySQL 5.0 の共存環境を構築する

RHEL4 で MySQL 4.1 と MySQL 5.0 を共存させた時のメモ。

1. 要件

今回の要件は下記の通り。

  • RPMでMySQL 4.1 が導入済みであり、すでに稼働中である。
  • MySQL 5.0 をソースコードからコンパイル・インストールする。
  • 両バージョンのMySQLデーモンを同時に常駐させる。

便宜上、設定等について下記の通り仮定する。

  • MySQL 5.0 の実行ユーザーは mysql50 とする。
  • MySQL 5.0 のインストール先は /usr/local/mysql50 とする。
  • MySQL 5.0 のデータベース保存先は /usr/local/mysql50/var とする。

2. 事前準備

MySQL 5.0 の実行ユーザーとして mysql50 ユーザーを作成する。

[root@localhost ~]# useradd mysql50

つづいて MySQL 5.0 のインストール先となるディレクトリを作成する。

[root@localhost ~]# mkdir /usr/local/mysql50
[root@localhost ~]#chown -R mysql50. /usr/local/mysql50

最後にMySQLソースコードを入手する。http://dev.mysql.com/downloads/mysql/ からたどっていって mysql-5.0.xx.tar.gz を探し、指定されたURLからダウンロード。現時点の5.0系最新バージョンは 5.0.89 だった。

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget [指定されたURL]
[root@localhost src]# tar xvzf mysql-5.0.xx.tar.gz
[root@localhost src]# chown -R mysql50. mysql-5.0.xx

また、念のために既存の4.1で使用しているデータベースとmy.cnf はバックアップをとっておくべきだろう。

3. configure

mysql50ユーザーになり、configure を実行する。

[root@localhost ~]# su - mysql50
[mysql50@localhost mysql-5.0.xx]$ cd /usr/local/src/mysql-5.0.xx
[mysql50@localhost mysql-5.0.xx]$ ./configure \
  --prefix=/usr/local/mysql50 \
  --with-mysqld-user=mysql50 \
  --with-tcp-port=53306 \
  --with-unix-socket-path=/usr/local/mysql50/var/mysql.sock \
  --with-pthread \
  --with-charset=utf8 \
  --with-extra-chrasets=all \
  --with-named-thread-libs=-lpthread \
  --disable-dependency-tracking \
  --without-bench \
  --without-debug \
  --enable-assembler

今回指定したオプションのうち、共存環境の構築に必要なオプションは下記の通り。

~オプション ~意味
--prefix=... MySQL 5.0 のインストール先の指定。事前準備で作成したディレクトリを指定する。
--with-mysqld-user=... MySQLデーモンの実行ユーザー。事前準備で作成したユーザーを指定する。
--with-tcp-port=... 外部からの接続を待ち受けるポートの指定。デフォルトは3306だがすでに MySQL 4.1 が使用しているため、異なるポートを指定する。
--with-unix-socket-path=... 内部からの接続を待ち受けるUNIXソケットの指定。これも MySQL 4.1 と分ける必要があるため、明示的に指定する。

その他のオプションは参考サイトから丸パクリ。

4. インストール

configure が無事に完了したら、make して make install。

[mysql50@localhost mysql-5.0.xx]$ make
(省略)
[mysql50@localhost mysql-5.0.xx]$ make install
(省略)

次にMySQLに付属している mysql_install_db スクリプトを使用してデータベースを作成する。

[mysql50@localhost mysql-5.0.xx]$ scripts/mysql_install_db \
  --basedir=/usr/local/mysql50 \
  --datadir=/usr/local/mysql50/var \
  --srcdir=/usr/local/src/mysql-5.0.xx \
  --user=mysql50

つづいてMySQL 5.0用の設定ファイルを作成する。MySQLは標準で /etc/my.cnf を読み込むが、追加でいくつかのファイルを読み込んでそれを上書きすることが可能だ。今回はそのうちの一つ、データベースの保存先ディレクトリに my.cnf を作成し、MySQL 4.0 から変更する点についてのみこちらに記述する。

[mysql50@localhost mysql-5.0.xx]$ mkdir /usr/local/mysql50/var
[mysql50@localhost mysql-5.0.xx]$ vim /usr/local/mysql50/var/my.cnf

作成した my.cnf はこんな感じ。

[mysqld]
port=53306
basedir=/usr/local/mysql50
datadir=/usr/local/mysql50/var
default-character-set=utf8

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

[mysqld_safe]
socket=/usr/local/mysql50/var/mysql.sock
err-log=/var/log/mysqld50.log
pid-file=/var/run/mysqld/mysqld50.pid

[client]
default-character-set = utf8

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

最後に root に戻り、起動スクリプトを /etc/rc.d/init.d 以下にコピー、MySQL 5.0 を起動する。

[mysql50@localhost mysql-5.0.xx]$ exit
[root@localhost ~]# cd /etc/rc.d/init.d
[root@localhost init.d]# cp /usr/local/src/mysql-5.0.xx/support-files/mysql.server ./mysqld50
[root@localhost init.d]# chown root. mysqld50
[root@localhost init.d]# chmod 755 mysqld50
[root@localhost init.d]# chkconfig --add mysqld50
[root@localhost init.d]# service mysqld50 start

無事に起動すれば大成功。起動に失敗した場合は、以下のように自動起動をOFFにして、原因を探る。

[root@localhost ~]# chkconfig mysqld50 off

5. 接続の確認

MySQL 5.0 側の mysql コマンドから接続を確認する。

[root@localhost ~]# /usr/local/mysql50/bin/mysql -u root

うまくつながればOK。あとは通常のMySQLのインストール後の作業と同じでOK。また、毎回フルパスで起動するのは面倒なので、以下のようにシンボリックリンクを張っておくと便利。

[root@localhost ~]# ln -s /usr/local/mysql50/bin/mysql /usr/bin/mysql50