MySQLレプリケーションをマスター無停止で再構築

MySQLレプリケーション障害時、マスターを無停止で再構築する手順。

※マスターでdumpファイルを取得する際、DBのロックがかかるため、dumpに時間がかかる(DBサイズが大きい等)の場合は現実的ではありません。

(dumpの際、「--single-transaction」オプションを指定することでロックをかけずに実現できるようですが、こちらは未検証

1.マスターにてdumpファイル取得

# mysqldump --all-databases --add-drop-table --master-data -p > test.db

dumpの際、「--master-data」オプションを指定することでdump時のバイナリログ、ポジションの情報が付与されます。

上記オプションでdumpを取得した場合、dumpファイルに下記のような「CHANGE MASTER」のSQLが追加されます。

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=2376;

※こちらのバイナリログ、ポジション情報をメモしておく。

2.スレーブリストア

mysql> STOP SLAVE;

# mysql -p < test.db

※レプリケーション同期がONになっているとdumpリストアができないため、「STOP SLAVE」を実行してからリストアします。

3.レプリケーション再同期

mysql>  CHANGE MASTER TO MASTER_HOST='********', MASTER_USER='*********', MASTER_PASSWORD='*********', MASTER_LOG_FILE='mysql-bin.000003'', MASTER_LOG_POS=2376;

mysql> START SLAVE;

※「MASTER_LOG_FILE」および「MASTER_LOG_POS」は上記「1」で確認した情報をもとに入力

以上で作業は完了です。

logo-mysql-170x115

投稿者プロフィール

fukuda
2012年スカイアーチ入社。
主にAWSを中心としたインフラ構築運用や導入支援などを行っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

ABOUTこの記事をかいた人

2012年スカイアーチ入社。 主にAWSを中心としたインフラ構築運用や導入支援などを行っています。