MySQL 5.6 は、スレーブサーバーがマスターから意図的に少なくとも指定した時間遅れる、遅延レプリケーションをサポートします。デフォルトの遅延は 0 秒です。CHANGE MASTER TO
の MASTER_DELAY
オプションを使用して、遅延を N
秒に設定してください。
CHANGE MASTER TO MASTER_DELAY = N;
マスターから受信するイベントは、マスター上での実行より少なくとも N
秒後になるまで実行されません。例外は、形式記述イベントまたはログファイルローテーションイベントには遅延がなく、これらは SQL スレッドの内部状態にのみ影響します。
遅延レプリケーションはいくつかの目的に使用できます。
マスター上でのユーザーの誤りから保護するため。DBA は遅延スレーブを障害の直前までロールバックできます。
遅延があるときにシステムがどのように動作するかをテストするため。たとえば、アプリケーションで、スレーブでの大きな負荷が原因で遅延が発生する場合があります。しかし、この負荷レベルを生成するのが難しい場合があります。遅延レプリケーションは、負荷をシミュレートしなくても遅延をシミュレートできます。遅延をしているスレーブに関連する条件をデバッグするために使用することもできます。
バックアップをリロードすることなく、データベースが以前にどのようであったかを調べるため。たとえば、遅延が 1 週間で、最後の数日間の開発の前にデータベースがどのようであったかを DBA が確認する必要がある場合には、遅延スレーブを検査できます。
START SLAVE
および STOP SLAVE
はすぐに適用され、遅延を無視します。RESET SLAVE
は遅延を 0 にリセットします。
SHOW SLAVE STATUS
には、遅延に関する情報を提供する次のような 3 つのフィールドがあります。
SQL_Delay
: スレーブがマスターより遅延する必要がある秒数を示す、負でない整数。SQL_Remaining_Delay
:Slave_SQL_Running_State
がWaiting until MASTER_DELAY seconds after master executed event
のときに、このフィールドには遅延の残り秒数を示す整数が含まれます。ほかのときは、このフィールドはNULL
です。Slave_SQL_Running_State
: SQL スレッドの状態を示す文字列 (Slave_IO_State
に似ています)。値は、SHOW PROCESSLIST
で表示される、SQL スレッドのState
値と同じです。
スレーブ SQL スレッドがイベント実行前に遅延が経過するのを待機しているときは、SHOW PROCESSLIST
はその State
値を Waiting until MASTER_DELAY seconds after master executed event
として表示します。
relay-log.info
ファイルに遅延値が含まれるようになり、ファイル形式が変更されました。セクション17.2.2.2「スレーブステータスログ」を参照してください。たとえば、ファイルの最初の行がファイル内の行数を示すようになりました。スレーブサーバーを MySQL 5.6 より前のバージョンにダウングレードすると、古いサーバーはファイルを正しく読み取りません。これに対処するには、テキストエディタでファイルを変更し、行数を含む最初の行を削除します。