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」で確認した情報をもとに入力
以上で作業は完了です。
投稿者プロフィール
-
2012年スカイアーチ入社。
主にAWSを中心としたインフラ構築運用や導入支援などを行っています。