MySQL Slave再構築

とあるクラウド上で、MySQLのMaster-Slave構成を組んでいるが、あるときSlaveサーバが載っているホストがダウンしたらしく、Slaveサーバもダウンした。
めでたく別ホスト上に自動で立ち上がってきたのだが、ブチッと切れたのでレプリケーションエラーが発生していた。よってSlaveを再構築することになった。

作業その前に

作業完了後は以下の確認をしたいため準備しておくこと。

  • dabatase、table、データ(サンプル)の数が一致すること
  • Master で create dabase をして、 Slaveに伝播されること
  • Slave を restart してもレプリケーションが正しく動作すること
  • MySQLのエラーログにエラー等が出ないこと

Master で dump を取得

mysqldump -u root -p --opt --single-transaction --master-data --all-databases > /tmp/Master-alldatabases.dmp.`date +%Y%m%d`

ポジションの取得

後ほどSlaveの設定をする際に、ポジションの情報が必要なので、上記手順で取得した dump から MASTER_LOG_FILE 、 MASTER_LOG_POS を確認しメモしておく。

grep -i 'CHANGE MASTER TO' /tmp/Master-alldatabases.dmp.`date +%Y%m%d`
-----
CHANGE MASTER TO MASTER_LOG_FILE='binary_log.000044', MASTER_LOG_POS=117069861;

Slave へ dump を転送

手順は略。環境によって具合良くやってください。

Slave で MySQL のデータをバックアップ(念のため)

cd /var/lib
tar zcvf mysql.tgz mysql/

slave の設定を削除

reset slave all;

slave status も Empty となり、 relay_log もリセットされる。

Slave に Master の Dump を投入

mysql -u root -p <  /tmp/Master-alldatabases.dmp.`date +%Y%m%d`

Slave 設定

CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='slave_user',
MASTER_PASSWORD='slavepasswd',
MASTER_LOG_FILE='binary_log.000044',
MASTER_LOG_POS=117069861;
-----
start slave ;