mysqld_multiのはじめ方

一台のPCで複数のmysqldを立ち上げたいときに便利なmysqld_multiの解説です。
mysqlレプリケーションのマスターをdaemonごとにしか指定できないので、違うマスターを参照しているスレーブを同じPCで構築したい時などに便利です。

設定方法

/etc/my.cnfを次のような感じに変更

[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = multi_admin
password   = XXXXXXX

[mysqld]
user=mysql

[mysqld1]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

pid-file=/var/run/mysqld/mysqld.pid
log-error=/var/log/mysqld.log

slave-skip-errors=1062,1064
server-id=1721602

[mysqld2]
port = 3307
datadir=/var/lib/mysql2
socket=/var/lib/mysql2/mysql.sock

pid-file=/var/run/mysqld/mysqld2.pid
log-error=/var/log/mysqld2.log

slave-skip-errors=1062,1064
server-id=17216012

解説

  • [mysqld1] のように末尾に番号が付いているところが、それぞれのmysqldインスタンスの設定になります。
  • [mysqld] には共通の設定がかけます。
[mysqld_multi]
user       = multi_admin
password   = XXXXXX

この部分はmysqlでのユーザーを指定していて、unixのユーザーではありません。
このユーザーが、実際のmysqlインスタンスのシャットダウンを行うので GRANT の設定も必要です。以下のコマンドで適切にGRANTを指定して下さい。

mysql> GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'XXXXXXX'

上の設定だと、二つ目のmysqldは /var/lib/mysql2 以下にデータを置くのですが、そこにmysql自体の情報( 'mysql'データベース )がないと、そもそも二つ目の mysql が起動しません。

なので

sudo mysql_install_db --datadir=/var/lib/mysql2

として mysql の初期化もしておきます。

ここまでできれば

$ sudo mysqld_multi start

でサーバーが起動します `ps aux | grep mysql` などで二つのサーバーが起動していることを確認しましょう。

うまく起動出来ていない時は、my.cnf で指定したそれぞれのログファイルを確認したり、 /usr/shara/mysqld_multi.log を
確認すると良いでしょう。