マスターバイナリログ内のマスターの現在座標を注目してください。この情報は、現在のポイントでレプリケーションプロセスを起動するようにスレーブを構成するために必要です。
レプリケーションプロセスを起動する前に、スレーブ上で同期する既存のデータがマスター上にある場合、マスターがステートメントの実行を継続するのを許可する前に、マスターでのステートメントの処理を停止してから、現在のバイナリログ座標を取得してそのデータをダンプする必要があります。ステートメントの実行を停止しない場合は、使用するデータダンプとマスターステータス情報が一致せず、スレーブ上でデータベースが一貫性を失ったり破損したりします。
マスターバイナリログ座標を取得するには、次の手順に従ってください。
-
コマンド行クライアントでマスターに接続することでマスター上でセッションを起動し、
FLUSH TABLES WITH READ LOCK
ステートメントを実行することですべてのテーブルをフラッシュして書き込みステートメントをブロックします。mysql> FLUSH TABLES WITH READ LOCK;
InnoDB
テーブルの場合、FLUSH TABLES WITH READ LOCK
はCOMMIT
操作もブロックします。警告読み取りロックを有効のままにするため、
FLUSH TABLES
ステートメントを発行したクライアントを実行中のままにしてください。クライアントを終了すると、ロックは解除されます。 -
マスターの別のセッションで、
SHOW MASTER STATUS
ステートメントを使用して現在のバイナリログファイルの名前と位置を調べます。mysql > SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 73 | test | manual,mysql | +------------------+----------+--------------+------------------+
File
カラムはログファイルの名前を表し、Position
はファイル内の位置を表します。この例では、バイナリログファイルはmysql-bin.000003
で、位置は 73 です。これらの値を記録します。これらは、あとでスレーブをセットアップするときに必要です。それらは、スレーブがマスターからの新しい更新の処理を始めるべきレプリケーション座標を表します。バイナリロギングを有効にしないでマスターがすでに動作していた場合、
SHOW MASTER STATUS
または mysqldump --master-data が表示するログファイルの名前と位置の値は空になります。この場合、あとでスレーブのログファイルと位置を指定するときに使用する必要がある値は、空の文字列 (''
) と4
です。
これで、スレーブがレプリケーションを開始する適切な位置でバイナリログから読み取りを開始するために必要な情報を入手しました。
レプリケーションを開始する前にスレーブと同期する必要がある既存のデータがある場合は、ロックが適切に維持されるようにクライアントを実行したままにしてから、セクション17.1.1.5「mysqldump を使用したデータスナップショットの作成」またはセクション17.1.1.6「ローデータファイルを使用したデータスナップショットの作成」に進んでください。ここでの意図は、スレーブにコピーされたデータがマスターと同期された状態であるように、これ以上の変更を避けることです。
まったく新しいマスターとスレーブのレプリケーショングループをセットアップしている場合、最初のセッションを終了して読み取りロックを解除できます。