レプリケーションプロセスを正しい時点で開始するようにレプリカを構成するには、そのバイナリログ内のソースの現在の座標を書き留める必要があります。
このプロシージャでは、InnoDB
テーブルの COMMIT
操作をブロックする FLUSH TABLES WITH READ LOCK
を使用します。
ソースを停止してデータスナップショットを作成する場合は、オプションでこの手順をスキップし、かわりにバイナリログインデックスファイルのコピーをデータスナップショットとともに格納できます。 その場合、ソースは再起動時に新しいバイナリログファイルを作成します。 したがって、レプリカがレプリケーションプロセスを開始すべきソースのバイナリログ座標は、その新しいファイルの開始点であり、コピーされたバイナリログインデックスファイルにリストされているファイルの次のソースのバイナリログファイルとなります。
ソースバイナリログ座標を取得するには、次のステップに従います:
-
コマンドラインクライアントを使用してソースに接続してセッションを開始し、
FLUSH TABLES WITH READ LOCK
ステートメントを実行してすべてのテーブルおよびブロック書込みステートメントをフラッシュします:mysql> FLUSH TABLES WITH READ LOCK;
警告読み取りロックを有効のままにするため、
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.2.5「データスナップショットの方法の選択」 に進みます。
新しいソースとレプリカの組合せを設定する場合は、最初のセッションを終了して読取りロックを解放できます。 手順については、セクション17.1.2.6.1「新しいソースおよびレプリカを使用したレプリケーションの設定」 を参照してください。