スレーブのレプリケーションを設定するには、マスタのバイナリ ログ内でマスタの現在位置を特定する必要があります。この情報は、スレーブがレプリケーション プロセスを開始するときに必要とします。それにより、正確な位置でバイナリ ログからのイベントを開始できます。
マスタに既存のデータがあり、それをレプリケーション プロセスを開始する前にスレーブと同期化するには、マスタのステートメント処理を停止し、現在位置を取得して、マスタにステートメント実行の継続を許可する前に、そのデータをダンプします。もし、ステートメントの実行を停止しないでデータのダンプを行うと、マスタのステータス情報に不一致が生じ、スレーブのデータベースが破損します。
マスタのステータス情報は、次のステップに従い取得します。
コマンド ライン
クライアントを開始し、すべてのデータをフラッシュし、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.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
File
カラムはログの名前を示し、Position
はファイル内のオフセットを示します。この例では、バイナリ
ログ ファイルは mysql-bin.003
で、オフセットは 73
です。これらの値は、後でスレーブをセットアップするときに必要になるので、書き控えます。マスタからの新たなアップデートを処理するスレーブのレプリケーション座標です。
バイナリ
ロギングを行わない状態で、マスタが稼動していた場合、ログ名と位置の値は
SHOW MASTER STATUS
に示されるか、または mysqldump
--master-data
は空の状態です。この場合、後でスレーブのログ
ファイルと位置を指定するときの値は
空文字列 (''
) および
4
です。
ここで、バイナリ ログからの読み込みを開始し、正確な位置からレプリケーションを行う準備がスレーブにできます。
レプリケーションを開始する前に、スレーブと同期化する必要がある既存データがある場合、クライアントをそのまま稼動させます。これによりロックは正しい位置に留まり、項5.1.1.5. 「mysqldump
を使用したデータ
スナップショットの制作」
または 項5.1.1.6. 「生データ ファイルでデータ スナップショットの作成」
へ進みます。
新たにマスタとスレーブのレプリケーション グループをセットアップする場合には、クライアントを終了し、ロックをリリースします。