LoginSignup
2
1

More than 5 years have passed since last update.

OSX の mysql 5.7 で mysqld_multi を使ってレプリケーションする

Posted at

モチベーションは、ちょっと slave のテストをする必要があったので適当にローカルで試したい、なんだけどまともに mysql の設定をした事がなかったので色々嵌る。

大体 公式 とかにかいてある事です。

my.cnf

場所

mysql --help に書いてありますが忘れる。
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

my.cnf

[mysqld_multi]
mysqld     = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user       = multi_admin
password   = password
[mysqld]
[mysqld1]
server-id = 1
socket     = /tmp/mysql.sock
port       = 3306
pid-file   = /usr/local/var/mysql/my.local.pid
datadir    = /usr/local/var/mysql
user       = root
[mysqld2]
server-id = 2
socket     = /tmp/mysql.sock2
port       = 3307
pid-file   = /usr/local/var/mysql2/my.local.pid2
datadir    = /usr/local/var/mysql2
user       = root

mysqld_multi --example でサンプルが出てくる。

mysql_install_db

で インストールした。
/usr/local/var/mysql2 等に ディレクトリを作成しておく。

[WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
と言われるけど password で嵌ったのでとりえあえず mysql_install_db を使って調査してた。

basedir オプションを指定しないと駄目なようなので、

 mysql_install_db --defaults-file=/etc/my.cnf --datadir=/usr/local/var/mysql2 --basedir=/usr/local/Cellar/mysql/5.7.18

とかで良いのかな。。。バージョン上がったら困るので symlink の方にすべきか。

5.7.6 以降の挙動

mysql_install_db で root の password が ~/.mysql_secret に書かれるようになった。嵌る。

slave は mysql port=3307 の方を新しく作ったのですが、めでたくパスワードが分かったのでこちらにも何とかログインできた。

slave
GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'password';

で multi_admin ユーザーで shutdown できるようにしておく。

その前に初期 password を変更しないと怒られるので

slave
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

を実行する。

これで mysqld_multi start/stop ができるようになるのだけど、--password オプションで password を渡さないと stop はできないようだ。

slave の設定

レプリケーション専用のユーザーを作る。
データの更新を防ぐ為にロックをかけておく。

master
CREATE USER 'repl'@'localhost' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost';

FLUSH TABLES WITH READ LOCK;

dump でスレーブにデータを入れる

mysqldump --all-databases --master-data -u root -p > dbdump.db
// slave に dump データを入れる
mysql -u root -S /tmp/mysql.sock2 -p < dbdump.db 

ロックを外す。

master
UNLOCK TABLES;

slave で マスター構成の設定をして、slave をスタートする。参考

slave
CHANGE MASTER TO MASTER_HOST='localhost', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=611;

start slave;

これで完了。

マスターの変更がスレーブに来ている事を確認できました。

参考サイト

Mac OSXでカジュアルにreplicationしてみる
Replication

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1