スレーブ サーバをコントロールする SQL ステートメント

1. CHANGE MASTER TO 構文
2. LOAD DATA FROM MASTER 構文
3. LOAD TABLE tbl_name FROM MASTER 構文
4. MASTER_POS_WAIT() 構文
5. RESET SLAVE 構文
6. SET GLOBAL SQL_SLAVE_SKIP_COUNTER 構文
7. SHOW SLAVE STATUS 構文
8. START SLAVE 構文
9. STOP SLAVE 構文

複製は SQL インターフェースを通してコントロールできます。.このセクションでは、スレーブ複製サーバの管理についてのステートメントの説明をします。項 「マスタ サーバをコントロールする SQL ステートメント」では、マスタ サーバの管理について説明しています。

1. CHANGE MASTER TO 構文

CHANGE MASTER TO master_def [, master_def] ...

master_def:
    MASTER_HOST = 'host_name'
  | MASTER_USER = 'user_name'
  | MASTER_PASSWORD = 'password'
  | MASTER_PORT = port_num
  | MASTER_CONNECT_RETRY = count
  | MASTER_LOG_FILE = 'master_log_name'
  | MASTER_LOG_POS = master_log_pos
  | RELAY_LOG_FILE = 'relay_log_name'
  | RELAY_LOG_POS = relay_log_pos
  | MASTER_SSL = {0|1}
  | MASTER_SSL_CA = 'ca_file_name'
  | MASTER_SSL_CAPATH = 'ca_directory_name'
  | MASTER_SSL_CERT = 'cert_file_name'
  | MASTER_SSL_KEY = 'key_file_name'
  | MASTER_SSL_CIPHER = 'cipher_list'

CHANGE MASTER TO は、スレーブ サーバがマスタ サーバに接続、また更新する時に利用するパラメータを変更します。それは master.inforelay-log.info ファイルのコンテンツの更新もします。

MASTER_USERMASTER_PASSWORDMASTER_SSLMASTER_SSL_CAMASTER_SSL_CAPATHMASTER_SSL_CERTMASTER_SSL_KEY、そして MASTER_SSL_CIPHER はどのようにマスタに接続すかという事について情報を提供します。

SSL オプション(MASTER_SSLMASTER_SSL_CAMASTER_SSL_CAPATHMASTER_SSL_CERTMASTER_SSL_KEY、そして MASTER_SSL_CIPHER) は、SSLサポート無しでコンパイルされたスレーブ上でも変更できます。それらは master.info ファイルに保存されますが、有効な SSL サポートを持つサーバを利用しなければ無視されます。

もし与えられたパラメータを指定しなければ、次の説明の中で指示されている場合以外は古い値を持ち続けます。例えば、MySQL マスタに接続する為のパスワードが変更されたら、スレーブに新しいパスワードについて指示する為にこれらのステートメントを発行するだけでよいのです。

STOP SLAVE; -- if replication was running
CHANGE MASTER TO MASTER_PASSWORD='new3cret';
START SLAVE; -- if you want to restart replication

変更しないパラメータを指定する必要はありません。(ホスト、ポート、ユーザ、など)

MASTER_HOSTMASTER_PORT はマスタホストと、その TCP/IP ポートのホスト名(または IP アドレス) です。 もし MASTER_HOSTlocalhost と同等であれば、その時は MySQL の別の部分と同じで、ポート番号は無視されるという事に注意してください。(例えば、もし Unix ソケットファイルが利用できる場合)

もし MASTER_HOSTMASTER_PORT を指定すると、スレーブはマスタ サーバが以前とは違うと仮定します。(たとえ現在の値と等しいホストやポート値を指定したとしても)この場合、マスタ バイナリ ログ名と位置の古い値は適応しないとみなされる為、もしステートメント内の MASTER_LOG_FILEMASTER_LOG_POS を指定しなければ、MASTER_LOG_FILE=''MASTER_LOG_POS=4 が静かにそれに加えられます。

MASTER_LOG_FILEMASTER_LOG_POS は、次にスレットがスタートするマスタから、スレーブ I/O スレッドが読み込みを始めなければいけない座標です。もしそれらのどちもを指定しなければ、RELAY_LOG_FILERELAY_LOG_POS を指定する事ができません。もし MASTER_LOG_FILEMASTER_LOG_POS も指定されなければ、CHANGE MASTER が発行される前に、スレーブは slave SQL thread の最後の座標を利用します。これは、ただ単に使用するパスワードを変更したいだけの時に、スレーブ I/O スレッドと比べてスレーブ SQL スレッドが遅かったとしても、複製内に切れ目がない事を保証します。

CHANGE MASTER は、RELAY_LOG_FILERELAY_LOG_POS を指定しない限り、全てのリレー ログ ファイルを削除し、新しい物をスタートします。その場合、リレー ログは保管されます。relay_log_purge グローバル変数は静かに0に設定されます。

CHANGE MASTER は、マスタのスナップショットを持っていて、それに対応するログとオフセットを記録した時に、スレーブを設定するのに役立ちます。スナップショットをスレーブにロードした後、スレーブ上で CHANGE MASTER TO MASTER_LOG_FILE='log_name_on_master', MASTER_LOG_POS=log_offset_on_master を起動する事ができます。

次の例は、マスタとマスタのバイナリ ログ座標を変更します。これは、マスタを複製する為にスレーブを設定したい時に利用します。

CHANGE MASTER TO
  MASTER_HOST='master2.mycompany.com',
  MASTER_USER='replication',
  MASTER_PASSWORD='bigs3cret',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master2-bin.001',
  MASTER_LOG_POS=4,
  MASTER_CONNECT_RETRY=10;

次の例は、あまり利用されない操作を表しています。これは、何かの理由でもう一度実行したいリレー ログをスレーブが持っている時に利用します。これを行う為には、マスタにはアクセス不可能でなければいけません。CHANGE MASTER TO を利用し、SQL スレッドをスタートさせるだけでよいです。(START SLAVE SQL_THREAD)

CHANGE MASTER TO
  RELAY_LOG_FILE='slave-relay-bin.006',
  RELAY_LOG_POS=4025;

スタンド アロンを利用した非複製セットアップ内、クラッシュ後の修復の為の非スレーブ サーバ内で、2番目の操作を利用する事もできます。サーバがクラッシュして、バックアップを格納したと仮定してください。サーバのバイナリログ(リレーログではなく通常のバイナリログ)、名づけられた(例えば)myhost-bin.* を再生したいでしょう。まず、次の手順と全く同じように作業しなかった為にサーバが誤ってバイナリ ログを消去してしまう、という場合に備えて、これらのバイナリ ログのバックアップ コピーを安全なところに作成してください。更なる安全の為に SET GLOBAL relay_log_purge=0 を利用してください。--log-bin オプションは利用せず、その代わりに、--replicate-same-server-id--relay-log=myhost-bin (サーバにこれらの通常のバイナリ ログがリレー ログだと信じさせる為)そして --skip-slave-start オプションを利用してサーバをスタートさせてください。サーバがスタートしたら、これらのステートメントを発行してください。

CHANGE MASTER TO
  RELAY_LOG_FILE='myhost-bin.153',
  RELAY_LOG_POS=410,
  MASTER_HOST='some_dummy_string';
START SLAVE SQL_THREAD;

サーバがそれ自身のバイナリ ログを読み込み、実行するので、クラッシュの修復を達成します。修復が終了したら、STOP SLAVE を起動し、サーバをシャットダウンし、master.inforelay-log.info ファイルを削除し、そして元のオプションを利用してサーバを再スタートさせてください。

MASTER_HOST オプション(たとえダミー値を利用していても) を指定するには、それがスレーブだとマスタに信じさせる事が必要です。

2. LOAD DATA FROM MASTER 構文

LOAD DATA FROM MASTER

この機能は終了しました。今後は使わないことを勧めます。MySQLの将来のバージョンでは取り除かれることもあります。

LOAD DATA FROM MASTERLOAD TABLE FROM MASTER の現在のインプリメンテーションがとても制限されているので、これらのステートメントは MySQL のバージョン 4.1 以降では廃止予定です。今後のバージョンでは、さらに進歩した技術(「online backup」 と呼ばれる物) を紹介する予定です。その技術は、さらに多くのストレージ エンジンと機能する更なる利点を持ちます。

MySQL 5.1 以前のバージョンで LOAD DATA FROM MASTERLOAD TABLE FROM MASTER を利用する為に推奨する代替方法は、mysqldumpmysqlhotcopy を利用する事です。後者は Perl と2つの Perl モジュール(DBIDBD:mysql)を必要とし、MyISAMARCHIVE テーブルにだけ機能します。mysqldump を利用すると、マスタ上に SQL ダンプを作成でき、それらをスレーブ上の mysql クライアントにパイプ(またはコピー)できます。これは全てのストレージ エンジンに機能するという利点を持ちますが、SELECT を利用して機能する為スピードが大変遅いです。

このステートメントは、マスタのスナップショットを撮り、それをスレーブにコピーします。それは、スレーブが正しい位置から複製を始めるように MASTER_LOG_FILEMASTER_LOG_POS の値を更新します。--replicate-*-do-*--replicate-*-ignore-* オプションを利用して指定されたテーブルとデータベースの除外ルールは支持されています。マスタからテーブルをロードする時にスレーブを混乱させる --replicate-rewrite-db="db1->db3"--replicate-rewrite-db="db2->db3" のような非固有マッピングを設定する為に、ユーザはこのオプションを利用できるので、--replicate-rewrite-db は考慮に入れられて いません

このステートメントは次の条件に従い利用できます:

  • これは MyISAM テーブルにしか機能しません。非 MyISAM テーブルをロードしようとすると、次のエラーが起こります。

    ERROR 1189 (08S01): Net error reading from master
  • それはスナップショットを撮っている間にグローバル リード ロックを取得し、それはロード作業中のマスタ上での更新を妨げます。

もし大きいテーブルをロードしていたら、マスタとスレーブの両方で net_read_timeoutnet_write_timeout の値を増やす必要があるでしょう。詳しくは 項 「システム変数」 を参照してください。

LOAD DATA FROM MASTERmysql データベースから何もコピー しない 事に注意してください。これは、マスタとスレーブ上で異なるユーザと権限を持つ事を簡単にします。

LOAD DATA FROM MASTER を利用する為には、 マスタに接続する為に利用される複製アカウントはマスタ上に RELOADSUPER 権限を持ち、ロードしたい全てのマスタ テーブルに SELECT 権限を持つ必要があります。ユーザが SELECT 権限を持たない全てのマスタ テーブルは LOAD DATA FROM MASTER に無視されます。これは、マスタがユーザからそれらを隠す為に起こります。LOAD DATA FROM MASTER は、ロードするデータベースを知る為に SHOW DATABASES をコールしますが、SHOW DATABASES はユーザが何かしらの権限を持つデータベースだけを返します。詳しくは 項11. 「SHOW DATABASES 構文」 を参照してください。スレーブ サイドでは、LOAD DATA FROM MASTER を発行するユーザはデータベースをドロップし作成する権限と、コピーされるテーブルを持つ必要があります。

3. LOAD TABLE tbl_name FROM MASTER 構文

LOAD TABLE tbl_name FROM MASTER

この機能は終了しました。今後は使わないことを勧めます。MySQLの将来のバージョンでは取り除かれることもあります。

LOAD DATA FROM MASTERLOAD TABLE FROM MASTER の現在のインプリメンテーションがとても制限されているので、これらのステートメントは MySQL のバージョン 4.1 以降では廃止予定です。今後のバージョンでは、さらに進歩した技術(「online backup」 と呼ばれる物) を紹介する予定です。その技術は、さらに多くのストレージ エンジンと機能する更なる利点を持ちます。

MySQL 5.1 以前のバージョンで LOAD DATA FROM MASTERLOAD TABLE FROM MASTER を利用する為に推奨する代替方法は、mysqldumpmysqlhotcopy を利用する事です。後者は Perl と2つの Perl モジュール(DBIDBD:mysql)を必要とし、MyISAMARCHIVE テーブルにだけ機能します。mysqldump を利用すると、マスタ上に SQL ダンプを作成でき、それらをスレーブ上の mysql クライアントにパイプ(またはコピー)できます。これは全てのストレージ エンジンに機能するという利点を持ちますが、SELECT を利用して機能する為スピードが大変遅いです。

マスタからスレーブにテーブルのコピーをトランスファします。このステートメントは主に LOAD DATA FROM MASTER 操作をデバッグしながらインプリメントされます。LOAD TABLE を利用するには、マスタ サーバに接続するのに利用されるアカウントはマスタ上に RELOADSUPER 権限を持ち、マスタ テーブルをロードする為に SELECT 権限を持つ必要があります。スレーブ サイドでは、LOAD TABLE FROM MASTER を発行するユーザはテーブルをドロップし作成する権限を持つ必要があります。

LOAD DATA FROM MASTER の条件もこれに適応します。例えば、LOAD TABLE FROM MASTERMyISAM テーブルに対してのみ機能します。

LOAD DATA FROM MASTER のタイム アウト ノートもこれに適応します。

4. MASTER_POS_WAIT() 構文

SELECT MASTER_POS_WAIT('master_log_file', master_log_pos)

このオプションはステートメントではなく関数です。これはスレーブがマスタのバイナリ ログ内の指定された位置までのイベントを読み込み、実行した事を保証する為に利用されます。完全な説明は 項 「その他の関数」 を参照してください。

5. RESET SLAVE 構文

RESET SLAVE

RESET SLAVE がスレーブがマスタのバイナリ ログ内の複製位置を忘れるよう働きかけます。このステートメントは再スタートの時に利用する為の物です。これは master.inforelay-log.info ファイル、全てのリレー ログを削除し、そして新しいリレー ログをスタートします。

注意:スレーブ SQL スレッドによって完全に実行されていなくても全てのリレー ログが削除されます。(もし STOP SLAVE ステートメントを発行していたり、スレーブが高負荷であると、複製スレーブ上にこの状態が存在しやすくなります。)

master.info ファイル内に格納された接続情報は、対応するスタートアップ オプション内で指定された値を利用して速やかにリセットされます。この情報は、マスタ ホスト、マスタ ポート、マスタ ユーザ、そしてマスタ パスワードのような値を含みます。もしスレーブ SQL スレッドが停止した時テンポラリ テーブルの複製の最中で、そして RESET SLAVE が発行されると、これらの複製テンポラリ テーブルはスレーブ上で削除されます。

6. SET GLOBAL SQL_SLAVE_SKIP_COUNTER 構文

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N

このステートメントは、マスタから次の N イベントをスキップします。これはステートメントによって引き起こされた複製から回復するのに役に立ちます。

このステートメントは、スレーブ スレッドが起動していない時のみ有効です。そうでなければ、エラーを発生させます。

7. SHOW SLAVE STATUS 構文

SHOW SLAVE STATUS

このステートメントは、スレーブ スレッドに不可欠なパラメータ上にステータス情報を提供します。mysql クライアントを利用してこのステートメントを発行すると、より読みやすい水平方向のレイアウトを得る為に、セミコロンではなく \G ステートメント ターミネータを利用する事ができます。

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
       Slave_IO_State: Waiting for master to send event
          Master_Host: localhost
          Master_User: root
          Master_Port: 3306
        Connect_Retry: 3
      Master_Log_File: gbichot-bin.005
  Read_Master_Log_Pos: 79
       Relay_Log_File: gbichot-relay-bin.005
        Relay_Log_Pos: 548
Relay_Master_Log_File: gbichot-bin.005
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
      Replicate_Do_DB:
  Replicate_Ignore_DB:
           Last_Errno: 0
           Last_Error:
         Skip_Counter: 0
  Exec_Master_Log_Pos: 79
      Relay_Log_Space: 552
      Until_Condition: None
       Until_Log_File:
        Until_Log_Pos: 0
   Master_SSL_Allowed: No
   Master_SSL_CA_File:
   Master_SSL_CA_Path:
      Master_SSL_Cert:
    Master_SSL_Cipher:
       Master_SSL_Key:
Seconds_Behind_Master: 8

SHOW SLAVE STATUS は次のフィールドを返します。

  • Slave_IO_State

    スレーブ I/O スレッドの為の SHOW PROCESSLIST のアウトプットの State フィールドのコピー。これで、スレッドが何をしているかを知る事ができます。マスタに接続しようとしている、マスタからイベントを待っている、マスタに再接続している、など。項 「レプリケーション実装の詳細」 にステートの例がリストされています。古いバージョンの MySQL では、マスタへの接続が成功していなくてもスレッドが起動し続ける事ができるので、このフィールドを確認する必要があります。もし起動していれば問題は有りませんが、もしそうでなければ、Last_Error フィールド内にエラーを見つけることができます。(下記で説明)

  • Master_Host

    現在のマスタ ホスト。

  • Master_User

    マスタに接続する為に利用される現在のユーザ。

  • Master_Port

    現在のマスタ ポート。

  • Connect_Retry

    --master-connect-retry オプションの現在の値。

  • Master_Log_File

    I/O スレッドが現在読み込んでいるマスタ バイナリ ログ ファイルの名前。

  • Read_Master_Log_Pos

    現在のマスタ バイナリ ログ内で、I/O スレッドが読み込んだところまでの位置。

  • Relay_Log_File

    現在読み込み、実行をしている SQL スレッドからのリレー ログ ファイルの名前。

  • Relay_Log_Pos

    SQL スレッドが現在のリレー ログ内で読み込み、実行したところまでの位置。

  • Relay_Master_Log_File

    SQL スレッドによって実行された一番最近のイベントを含むマスタ バイナリ ログ ファイルの名前。

  • Slave_IO_Running

    I/O スレッドがスタートされて、マスタに正常に接続したかどうか。MySQL の古いバージョンでは( 4.1.14 と 5.0.12 以前)、スレーブがまだマスタに接続されていなくても Slave_IO_RunningYES です。

  • Slave_SQL_Running

    SQL スレッドがスタートしたかどうか

  • Replicate_Do_DBReplicate_Ignore_DB

    もしあるなら、--replicate-do-db--replicate-ignore-db オプションを利用して指定されたデータベースのリスト。

  • Replicate_Do_TableReplicate_Ignore_TableReplicate_Wild_Do_TableReplicate_Wild_Ignore_Table

    もしあるなら、--replicate-do-table--replicate-ignore-table--replicate-wild-do-table、そして --replicate-wild-ignore_table オプションを利用して指定されたテーブルのリスト。

  • Last_ErrnoLast_Error

    一番最近実行されたクエリに返されるエラー数とエラー メッセージ。エラー数が0で、空の文字列のメッセージであれば、「no error.」 です。もし Last_Error 値が空でなければ、それもスレーブのエラー ログ内に現れます。例:

    Last_Errno: 1051
    Last_Error: error 'Unknown table 'z'' on query 'drop table z'

    このメッセージは、テーブル z がマスタ上に存在しそこでドロップされたが、それはスレーブ上には存在しなかった為、スレーブ上で DROP TABLE が失敗した、という事を含んでいます。(これは例えば、複製をセットアップする時にテーブルをスレーブにコピーするのを忘れた時に起きます。)

  • Skip_Counter

    SQL_SLAVE_SKIP_COUNTER に一番最近利用された値。

  • Exec_Master_Log_Pos

    マスタのバイナリ ログから SQL スレッドによって実行された最後のイベントの位置(Relay_Master_Log_File)。(マスタのバイナリ ログ内の Relay_Master_Log_FileExec_Master_Log_Pos)はリレーログ内の(Relay_Log_FileRelay_Log_Pos)に対応しています。

  • Relay_Log_Space

    全ての既存リレー ログを合計したサイズ。

  • Until_ConditionUntil_Log_FileUntil_Log_Pos

    START SLAVE ステートメントの UNTIL 条項内で指定された値。

    Until_Condition は3つの値を持ちます。

    • UNTIL 条項が指定されなければ None

    • もしスレーブがマスタのバイナリ ログ内の指定位置まで読み込んでいたら Master

    • もしスレーブがそのリレー ログ内の指定位置まで読み込んでいたら Relay

    Until_Log_FileUntil_Log_Pos は、SQL スレッドが実行を停止するポイントを定義するログ ファイル名と位置の値を指示します。

  • Master_SSL_AllowedMaster_SSL_CA_FileMaster_SSL_CA_PathMaster_SSL_CertMaster_SSL_CipherMaster_SSL_Key

    これらのフィールドは、もし SSL パラメータがあれば、マスタに接続するスレーブによって利用されるそれらを表します。

    Master_SSL_Allowed はこれらの値を持ちます。

    • もしマスタへの SSL 接続が許可されると Yes

    • もしマスタへの SSL 接続が許可されないと No

    • もし SSL 接続が許可されても、スレーブ サーバが有効な SSL サポートを持っていなければ Ignored

    別の SSL 関連フィールドの値は、--master-ca--master-capath--master-cert--master-cipher、そして --master-key オプションの値に対応します。

  • Seconds_Behind_Master

    このフィールドは、スレーブがどの程度 「late」 であるかの目安です。

    • スレーブ SQL スレッドがアクティブに起動している時(更新を実行している時)、このフィールドはスレッドによって実行されたマスタ上の一番最近のイベントのタイム スタンプから経過した秒数を表します。

    • SQL スレッドがスレーブ I/O スレッドに追いつき、そこからの更なるイベントを待ってアイドル状態になると、このフィールドはゼロになります。

    基本的に、このフィールドはスレーブ SQL スレッドとスレーブ I/O スレッド間の時差を秒数で計算します。

    もしマスタとスレーブ間のネットワーク接続が速ければ、スレーブ I/O スレッドはマスタにとても近いので、このフィールドはマスタと比べてスレーブ SQL スレッドがどれくらい遅いかを表す近似値と言えます。これは、もしネットワークが遅いと参考になる近似値とは 言えません。スレーブ SQL スレッドは頻繁に読み込みが遅いスレーブ I/O スレッドに追いつかれる為、I/O スレッドがマスタよりも遅くても Seconds_Behind_Master は 0 の値を頻繁に示します。言い換えると、このカラムは速いネットワークに対してだけ有効である という事です。

    この時間差の算出は、マスタとスレーブが同一の時計を持たなくても機能します。(時計の違いはスレーブ I/O スレッドがスタートする時に計算され、その時点から一定であると仮定されます。)Seconds_Behind_Master は、もしスレーブ SQL スレッドが起動していなかったり、スレーブ I/O スレッドが起動していない、またはマスタに接続されていない時は、NULL です(「unknown」 を意味する)。例えばもしスレーブ I/O スレッドが、再接続前に --master-connect-retry オプションによって与えられた秒数眠っていたとすると、スレーブはマスタが何をしているか知る事ができないので NULL が表示され、その為どの程度遅れているか正確に知る事ができません。

    このフィールドには1つ制限があります。タイムスタンプは複製中に維持されますので、これは、もしマスタ M1 自体が M0 のスレーブだったら、M0 のビンログからのイベントを複製する上で発生したM1のビンログからのイベントは、M0 のイベントのタイムスタンプを持つ、という事を意味します。これは MySQL が TIMESTAMP を正常に複製する事を可能にします。しかし、Seconds_Behind_Master の欠点は、もし M1 もクライアントから直接更新されると、最後の M1 のイベントは M0 からであったり、直接の更新からの一番最近のタイムスタンプであったりする為、その値はランダムに外れる、という事です。

8. START SLAVE 構文

START SLAVE [thread_type [, thread_type] ... ]
START SLAVE [SQL_THREAD] UNTIL
    MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos
START SLAVE [SQL_THREAD] UNTIL
    RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos

thread_type: IO_THREAD | SQL_THREAD

thread_type オプションを持たない START SLAVE は両方のスレーブ スレッドをスタートします。I/O スレッドはマスタ サーバからクエリを読み、それらをリレー ログ内に格納します。SQL スレッドはリレー ログを読みこみ、クエリを実行します。START SLAVESUPER 権限を必要とします。

もし START SLAVE がスレーブ スレッドのスタートに成功すると、エラー無しで返ります。しかし、そのよう場場合でも、スレーブ スレッドがスタートし、その後停止する、という事になり得ます。(例えば、マスタに接続できなかったり、マスタのバイナリログを読めなかったり、それ以外の問題の為)START SLAVE からはこれについての警告はありません。スレーブ スレッドによって発生したエラー メッセージに対するスレーブのエラー ログの確認、また SHOW SLAVE STATUS を利用してそれらが満足に機能している事を確認する必要があります。

どのスレッドをスタートするかを指定する為に、ステートメントに IO_THREADSQL_THREAD オプションを追加する事ができます。

UNTIL 条項は、SQL スレッドがマスタ バイナリ ログ、またはスレーブ リレー ログ内の指定ポイントに達するまで、スレーブがスタート、起動する事を指定する為に追加されるかもしれません。SQL スレッドがそのポイントに達すると、それは停止します。もし SQL_THREAD オプションがステートメント内で指定されると、それは SQL スレッドのみをスタートします。そうでなければ、それはスレーブ スレッドを両方スタートします。もし SQL スレッドが起動していると、UNTIL 条項は無視され、警告が発行されます。

UNTIL 条項には、ログ ファイル名と位置の両方を指定する必要があります。マスタとリレー ログ オプションを混同しないでください。

全ての UNTIL 条件は、後に続く STOP SLAVE ステートメント、UNTIL 条項を含まない START SLAVE ステートメント、またはサーバの再スタートによってリセットされます。

UNTIL 条項は、デバッグの複製や、スレーブがステートメントを複製するのを防ぎたいポイントの直前まで複製が続くように働きかけるのに役に立ちます。例えば、マスタ上でもし分別のない DROP TABLE ステートメントが実行されたら、スレーブがそのポイントまでは実行し、それ以上は進まないように指示する為 UNTIL を利用する事ができます。イベントが何であるかを調べる為には、マスタ ログかスレーブ リレー ログと共に、mysqlbinlog 利用するか、または SHOW BINLOG EVENTS ステートメントを利用してしてください。

もしスレーブ プロセス複製クエリをセクションの中で持つ為に UNTIL を利用していたら、スレーブ サーバがスタートする時に SQL スレッドが起動するのを防ぐ為に、スレーブを --skip-slave-start オプションでスタートするする事が推奨されています。予期せぬサーバの再スタートによって忘れられる事を防ぐ為、コマンド ライン上ではなく、オプション ファイル内でこのオプションを利用するのが一番良いでしょう。

SHOW SLAVE STATUS ステートメントは UNTIL 条件の現在の値を表示するアウトプット フィールドを含んでいます。

MySQL の古いバージョン内では(4.0.5以前)、このステートメントは SLAVE START と呼ばれていました。この利用方法は MySQL 5.1 内でいまだに後方互換の為に許容されていますが、廃止予定になっています。

9. STOP SLAVE 構文

STOP SLAVE [thread_type [, thread_type] ... ]

thread_type: IO_THREAD | SQL_THREAD

スレーブ スレッドを停止します。STOP SLAVESUPER 権限を必要とします。

START SLAVE のように、このステートメントは、スレッドに名前を付けたり、スレッドを停止したりする為に IO_THREADSQL_THREAD オプションと共に利用されます。

MySQL の古いバージョン内では(4.0.5以前)、このステートメントは SLAVE STOP と呼ばれていました。この利用方法は MySQL 5.1 内でいまだに後方互換の為に許容されていますが、廃止予定になっています。