Mysqld multiで異なるバージョンのMySQLを起動する。

提供:MySQL Practice Wiki

移動: 案内, 検索

mysqld_multiはperlで記述されたプログラムで、複数のmysqldインスタンスを起動・停止するのに便利である。

http://dev.mysql.com/doc/refman/5.1/ja/mysqld-multi.html

同じバージョンのサーバーインスタンス(つまりbasedirが同じ)を起動する分には問題ないが、basedirが異なるMySQLサーバーを起動しようとするとたまにエラーが起こる。その際、以下のようなエラーメッセージがログに記録されることがある。

080509 17:44:54  mysqld started
080509 17:44:54 [ERROR] Error message file '/usr/local/mysql-5.0.51b-osx10.5-x86/share/mysql/english/errmsg.sys' had only 475 error messages,
but it should contain at least 476 error messages.
Check that the above file is the right version for this program!
080509 17:44:54 [ERROR] Aborting

[mysqldN](Nは正の整数)セクションでbasedirをしてもこのようなエラーが起きる。違うバージョンのMySQLサーバーをmysqld_multiを使って起動することは出来ないのか?いや、そんなことはない。

原因

上記のようなエラーが出るのは、mysqld_safeの制限に起因するものだ。mysqld_safeはカレントワーキングディレクトリにあるmysqldとデータディレクトリを探すようになってしまっている。そのため、希にインストールディレクトリ(basedir)へ移動してから実行してやる必要があるのだ。以下のように。

shell> cd /usr/local/mysql-5.0.51b-osx10.5-x86
shell> bin/mysqld_safe &

詳細はこちらのマニュアルを参照。

http://dev.mysql.com/doc/refman/5.1/ja/mysqld-safe.html

ではどうすればいいのか。

対策

mysqld_multiの設定には、[mysqldN](Nは正の整数)というセクションを使う。このセクションではbasedir以外にも、起動するmysqld_safeまたはmysqldをインスタンスごとに設定することができる。以下のように書くとエラーになるが、

[mysqld10]
basedir=/usr/local/mysql-5.0.51b-osx10.5-x86
mysqld=/usr/local/mysql-5.0.51b-osx10.5-x86/bin/mysqld_safe
socket=...

以下のように書けば問題なくインスタンスを起動できる。

[mysqld10]
basedir=/usr/local/mysql-5.0.51b-osx10.5-x86
mysqld="cd /usr/local/mysql-5.0.51b-osx10.5-x86; bin/mysqld_safe"
socket=...
個人用ツール