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

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

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

[code language=”bash”]

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/

[/code]

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

[code language=”bash”]

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

[/code]

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

[code language=”bash”]
[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]

[/code]

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

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

[code language=”bash”]
[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
[/code]

mysqld_multiで起動

[code language=”bash”]
[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
[/code]

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

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

mysqld_multiで停止

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

[code language=”bash”]
[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
[/code]

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

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