MYSQLのレプリケーションを再構築する

広告

何かしらの原因でMysqlのマスターとスレーブ間でのデータに不整合が出た際のレプリケーション再構築方法メモ。

今回2日連続でマスターのディスク容量が一杯になってレプリケーションの整合性が取れなくなってしまった。

レプリケーションの設定はたまにしかやらないので自分用に残しておくことにする。

mysql>となっているコマンドは全てmysqlにログインして実行するコマンドです。

広告

スレーブの停止

不整合が出てしまっているので、スレーブは停止してDBの中を空にする。操作はコンソールから。

DBを消して空で作り直します。

マスターのデータをバックアップ

マスター側もコンソールから操作します。データのコピー方法はいろいろとありますが、今回はmysqldumpを使用します。

テーブルロック

コピー中にデータに変更が加わらないようにテーブルをロックします。

mysqldump

mysqldumpを使用してデータを出力します。今回の環境は特定DBのみレプリケーションしているので、特定DBのみファイルに書き出しました。

上でロックをかけてるコンソールとは別コンソールを開いて作業します。

レプリケーションマスターの状態確認

dump作成時点でのマスターの状態を確認します。

ここで表示されるFileとPositionの値をメモしましょう。

今回の環境の場合は↓こんな感じでした。

+——————-+——-
| File              | Position |
+——————-+——-
| mysqld-bin.000055 |     6980
+——————-+———-+

マスターDBのロック解除

ダウンタイムを少しでも短くしたい場合はここでロックを解除してマスターは通常動作に戻して問題ありません。

ロックをかけたコンソールで下記コマンドを実行します。

スレーブ側へファイルの転送

今回はSCPでファイル移動します。

上の例だとslaveserver.comというスレーブサーバーの/home/user/にdumpしたファイルを転送します。userは/home/user/に書き込み権限のあるスレーブサーバー上のユーザー名です。

スレーブにマスターのデータをコピー

マスターで作成したdumpをスレーブに流し込む

使用するのはmysqldumpコマンドではありません。私はよく間違えるので一応。

データベースdbnameにマスターから移したdbname.sqlのSQLを流し込みます。

レプリケーション情報の更新

レプリケーションを開始する位置を指定します。上でメモしたマスターの情報を使用します。

ログファイル名と開始行を更新します。一応変更されているかshow slave status;で確認しましょう。

スレーブの開始

スレーブを開始します。

広告

コメントをどうぞ

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">