開発環境用にMySQL5.6を複数インスタンス起動させる(mysqld_multi)

テーブル分散などでマスター1、マスター2にそれぞれスレーブが必要な場合、本番はいいけど、開発環境までサーバーをいくつも作るのはちょっとなので、1つのサーバーにmysqld_multiを使ってMySQLを複数立ち上げます。

CentOS6.4のMySQL5.6でやります。
MySQLはOracleからrpmをWgetしたもをインストール済みで、mysql_secure_installationで最低限の設定はしてある状態。


mkdir -p /var/lib/mysql_multi/mysqld{1,2,3,4}
mysql_install_db --datadir=/var/lib/mysql_multi/mysqld1 --user=mysql
chown -R mysql. /var/lib/mysql_multi/

各データディレクトリを作成して、mysql_install_dbでセットアップ


mysql_install_db --datadir=/var/lib/mysql_multi/mysqld1 --user=mysql
mysql_install_db --datadir=/var/lib/mysql_multi/mysqld2 --user=mysql
mysql_install_db --datadir=/var/lib/mysql_multi/mysqld3 --user=mysql
mysql_install_db --datadir=/var/lib/mysql_multi/mysqld4 --user=mysql

my.confに[mysqld_multi]と各インスタンスの設定を行う。
mysqldはmysqld_safeを指定して、[mysqld_multi]のuser、passはmysqladminの情報
あとでmysqladminのパスワードなどはセットアップします。

[root@so01b ~]#vi /etc/my.conf

[mysqld_multi]
mysqld        = /usr/bin/mysqld_safe
mysqladmin    = /usr/bin/mysqladmin
log           = /var/log/mysql/multi.log
user          = root
password      = 2aoSEsRs4SSp

[mysqld1]
server-id     = 101
port          = 33061
basedir       = /var/lib/mysql
datadir       = /var/lib/mysql_multi/mysqld1/
socket        = /var/lib/mysql_multi/mysqld1/mysql.sock
pid-file      = /var/lib/mysql_multi/mysqld1/mysql.pid
log-error     = /var/log/mysql/mysqld1_error.log
mysqld        = mysqld_safe

[mysqld2]
server-id     = 102
port          = 33062
basedir       = /var/lib/mysql
datadir       = /var/lib/mysql_multi/mysqld2/
socket        = /var/lib/mysql_multi/mysqld2/mysql.sock
pid-file      = /var/lib/mysql_multi/mysqld2/mysql.pid
log-error     = /var/log/mysql/mysqld2_error.log
mysqld        = mysqld_safe

[mysqld3]
...
[mysqld4]
...

これで大体完了、mysqld_multiで状態を確認する。

分かりにくいですが、「is not running」です。

[root@so01b~]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is not running
MySQL server from group: mysqld2 is not running
MySQL server from group: mysqld3 is not running
MySQL server from group: mysqld4 is not running

mysqld_multiで起動

[root@so01b~]# mysqld_multi start
[root@so01b~]#
[root@so01b~]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is  running
MySQL server from group: mysqld2 is  running
MySQL server from group: mysqld3 is  running
MySQL server from group: mysqld4 is  running

mysqld_multiで起動した、ポート別のMySQLのmysqladminのパスワード変更
インスタンス全部に適応すると、mysqld_multiでstopができるようになります。

[root@so01b~]#  mysqladmin password 2aoSEsRs4SSp -S/var/lib/mysql_multi/mysqld4/mysql.sock -u root -p

mysqld_multiで停止

止まらない場合、mysqladminのパスワードが違ったりして、インスタンスをmysql_multiが停止できてません。
また、mysqld_multiは標準出力にエラーは出しませんし、OKとも言いません。

[root@so01b~]# mysqld_multi stop
[root@so01b~]# 
[root@so01b~]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is not running
MySQL server from group: mysqld2 is not running
MySQL server from group: mysqld3 is not running
MySQL server from group: mysqld4 is not running

mysqld_multiで起動した、ポート別のMySQLへ接続

[root@so01b~]# mysql -u root -p --socket=/var/lib/mysql_multi/mysqld1/mysql.sock