とあるクラウド上で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
を確認しメモしておきます。
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;