SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【MySQL】4.1と5.5を1台のサーバーで両方使えるようにする

問題

1台のサーバーでバージョンの違う2つのMySQLデータベースサーバーを稼動させたい。

4.1系(古い環境)と5系(最新の環境)が両方必要となってしまった。共存可能?

解答例

1台のサーバーで、複数のMySQLデータベースサーバーを稼動させることは可能。

そのMySQLのバージョンは、同じバージョンでも違うバージョンでも可能。

通常の手順で最新(5系)のMySQLがインストールされて、稼動しているとする。そこに古い(4系)のMySQLをインストールして動かしてみる。

1、MySQL4を入手

もう配布していないので、古いサーバーから漁ってきた。

2、MySQL4をコンパイル、インストール

prefixを指定して、既存のMySQLと別の場所に。

# ./configure --prefix=/usr/local/mysql4.1 --with-extra-charsets=all --with-mysqld-user=mysql --with-innodb
# make
# make install

3、MySQL4を設定

my.cnf を、この辺に置く /usr/local/mysql4.1/var/my.cnf

ポート、ソケットを変える。

# cp /usr/local/src/mysql-4.1.22/support-files/my-medium.cnf /usr/local/mysql4.1/my.cnf
# vi /usr/local/mysql4.1/var/my.cnf
[mysqld]
port = 3307
socket = /tmp/mysql41.sock

3、自動起動の設定

先に通常通りのインストールをした5系のMySQLにmysqlの名前は使われているので、適当な名前に設定。

# cp /usr/local/src/mysql-4.1.22/support-files/mysql.server /etc/init.d/mysql41
# chmod 755 /etc/init.d/mysql41
# chkconfig --add mysql41

4、データベース初期化

# /usr/local/mysql4.1/bin/mysql_install_db --basedir=/usr/local/mysql4.1
# chown -R mysql:mysql /usr/local/mysql4.1

5、両方起動する

このあたりから、どうやるのが最善策なのかわからないまま力技。

MySQL4起動時に/etc/my.cnf を読まれてしまうのだが、MySQL5用の設定項目が読み込まれてしまい、MySQL4にとっては不明な設定項目があるとエラーで起動しないなどの現象が発生する。

MySQL5側はごく普通の状態のままにしておきたかったので、MySQL4側では/etc/my.cnf を読まないように、起動スクリプトを変更した。

これで /usr/local/mysql4.1/var/my.cnf に書いた設定だけを読んで起動してくれる。

# vi /etc/init.d/mysql41
200行目付近
---変更前
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&1 &
---変更後
$bindir/mysqld_safe --defaults-file=/usr/local/mysql4.1/var/my.cnf --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&1 &

ようやく起動。

# /etc/init.d/mysql41 start

6、確認など

両方起動している。

# ps x | grep mysql
 5876 pts/0    S      0:00 /bin/sh /usr/local/mysql4.1/bin/mysqld_safe --defaults-file=/usr/local/mysql4.1/var/my.cnf --datadir=/usr/local/mysql4.1/var --pid-file=/usr/local/mysql4.1/var/xxxx.pid
 7091 pts/0    S+     0:00 grep mysql
15768 ?        S      0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/xxxx.pid

MySQL5に接続(自サーバーで、デフォルトのポート、ソケットで起動しているので、コマンド引数をいろいろ省略)

# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.5.12-log Source distribution

MySQL4に接続(UNIXドメインソケットで)

# mysql --socket=/tmp/mysql41.sock -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 4.1.22-log

MySQL4に接続(TCP/IPで)

# mysql -h 127.0.0.1 -P 3307 -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 4.1.22-log

無事起動、接続できたので、後はユーザー追加、パスワード設定などおこなう。

関連するメモ

コメント