Edited at

MySQL Slave再構築

とあるクラウド上でMySQLMaster-Slave構成を組んでいるのですが、

あるときSlaveサーバが載っているホストがダウンしたらしく、Slaveサーバもダウンしてしまいました。

めでたく別ホスト上に自動で立ち上がってきたのですが、ブチッと切れたので、レプリケーションエラーが発生してしまっていました。

なので面倒なことにSlaveを再構築することになりました。


作業その前に

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



  • dabatasetableデータ(サンプル)の数が一致すること

  • 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_FILEMASTER_LOG_POSを確認しメモしておきます。

dumpは1行になっている可能性もあるため、以下のようなgrepだとよくわらない結果になるかもしれません。

その場合はlessなどで開いてから検索してみてください。

$ 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`

投入後、MySQLにログインしてから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;