Help us understand the problem. What is going on with this article?

MySQL Slave再構築

More than 1 year has passed since last update.

とあるクラウド上で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;
tomozo6
元Cobolerで金融系案件のPM。 インフラの技術に興味があって転職。 オンプレのホスティングサービスの構築,保守,運用を担当。 現在、時代の流れによりオンプレ環境を全てAWSへ移設する作業中。 全体改善,効率化,DevOpsが最近の興味関心。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away