HomebrewでインストールしたMySQLを複数動かす

手元でマスター/スレーブレプリケーションだったり、EclipseLinkのパーティショニングを試したかったので複数のMySQLが必要になったときの記録。mysqld_multiのはなし。

MySQLのインストール

簡単です。

brew install mysql

.my.cnfの編集

ホームディレクトリに.my.cnfをおいとく。mysqld0がマスター、mysqld1がスレーブとして編集します。

[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = root
password = passwd

[mysqld0]
server-id = 0
port = 3306
datadir = /Users/nagaseyasuhito/mysql/0
socket = /Users/nagaseyasuhito/mysql/0/mysql.sock
pid-file = /Users/nagaseyasuhito/mysql/0/mysqld.pid
log-bin = mysql-bin
general_log = 1
general_log_file = /Users/nagaseyasuhito/mysql/0/mysql-query.log

[mysqld1]
server-id = 1
port = 3307
datadir = /Users/nagaseyasuhito/mysql/1
socket = /Users/nagaseyasuhito/mysql/1/mysql.sock
pid-file = /Users/nagaseyasuhito/mysql/1/mysqld.pid
general_log = 1
general_log_file = /Users/nagaseyasuhito/mysql/1/mysql-query.log

こんな感じ。mysqld_multiセクションのユーザー名とパスワードが正しくないとシャットダウンできないので注意。

mysqld0をマスターにするのでmysqld0セクションにlog-binを書いておく。

初期化する

mysql_install_db --basedir=/usr/local/Cellar/mysql/5.6.23 --datadir=/Users/nagaseyasuhito/mysql/0
mysql_install_db --basedir=/usr/local/Cellar/mysql/5.6.23 --datadir=/Users/nagaseyasuhito/mysql/1

こんな感じでdatadirを初期化する。

起動する

mysqld_multi start

で起動します。ステータスの確認は、

mysqld_multi report

初期設定する

ローカルなので適当。

mysql -uroot          -h127.0.0.1 -P3306 -e "GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'passwd';"
mysql -uroot          -h127.0.0.1 -P3307 -e "GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'passwd';"

mysql -uroot -ppasswd -h127.0.0.1 -P3306 -e "GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'passwd';"
mysql -uroot -ppasswd -h127.0.0.1 -P3307 -e "GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'passwd';"

マスター/スレーブレプリケーションの設定もする。

mysql -uroot -ppasswd -h127.0.0.1 -P3306 -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'passwd';"
mysql -uroot -ppasswd -h127.0.0.1 -P3306 -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'passwd';"
mysql -uroot -ppasswd -h127.0.0.1 -P3306 -e "show master status;"

show master statusの結果が、

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      922 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

のように出力されるので、

mysql -uroot -ppasswd -h127.0.0.1 -P3307 -e "CHANGE MASTER TO MASTER_HOST = '127.0.0.1', MASTER_USER = 'repl', MASTER_PASSWORD = 'passwd', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=922;"

のようにMASTER_LOG_FILEとMASTER_LOG_POSを合わせておく。

mysql -uroot -ppasswd -h127.0.0.1 -P3307 -e "start slave;"
mysql -uroot -ppasswd -h127.0.0.1 -P3307 -e "show slave status\G"

start slaveでマスターからのレプリケーションを開始する。show slave statusでSlave_IO_RunningとSlave_SQL_RunningがYesになってればOK。

mysql -uroot -ppasswd -h127.0.0.1 -P3306 -e "create database replication_test"

のようにマスターにデータベースを作成してスレーブ側にも作成されてるはず。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>