MySQLのレプリケーションやってみた

読んでる本にMySQLは冗長化必須ですみたいなことがたくさん書いてあってなるほどという感じだったのだけどやったことなかったのでやってみた。

slaveを追加する時は、masterをtable lockする必要があり、lock中にmasterのメタ情報をslaveに書き込んで同期を始める感じ。
lockが必須というかそのままダンプするとlockされてしまう感じみたい。

  • master = 192.168.56.1
  • slave = 193.168.56.101

手順

1) master側でslaveからの接続用ユーザを作成する。

grant replication slave on *.* to 'repl'@'192.168.56.101' identified by 'pass';

1.5) my.confを修正する。

masterとslaveに一意になるようなserveri-idを設定する。 && restartする。

[mysqld]
log-bin=mysql-bin
server-id=1001

2) masterのダンプをslaveにリストアする

mysqldump -uroot mydb | ssh koji@192.168.56.101 mysql -urepl mydb --password=pass;

3) slaveにmasterのメタ情報を設定する

CHANGE MASTER TO
  MASTER_HOST='192.168.56.1',
  MASTER_USER='repl',
  MASTER_PASSWORD='pass',
  MASTER_LOG_FILE='mysql-bin.000005',
  MASTER_LOG_POS=154;

MASTER_LOG_FILE, MASTER_LOG_POSは、masterでshow master statusの結果からもってくる。

4) 同期を開始する

slaveから次のコマンドを実行する。

start slave ;

syslogとか見たりエラー起きてないかなど動作確認する。

できるまで間違ったこと

  • masterでユーザ作成で間違っててslaveからmasterに接続できなかった。
  • server-idが重複してた。

無停止なるほど => http://qiita.com/hit/items/7747394e8f2f6a515535

RDSすげえ。