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 を
確認すると良いでしょう。