CHANGE MASTER TO
構文
LOAD DATA FROM MASTER
構文
LOAD TABLE tbl_name FROM MASTER
構文
MASTER_POS_WAIT()
構文
RESET SLAVE
構文
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
構文
SHOW SLAVE STATUS
構文
START SLAVE
構文
STOP SLAVE
構文
複製は SQL インターフェースを通してコントロールできます。.このセクションでは、スレーブ複製サーバの管理についてのステートメントの説明をします。項 「マスタ サーバをコントロールする SQL ステートメント」では、マスタ サーバの管理について説明しています。
CHANGE MASTER TO
構文CHANGE MASTER TOmaster_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.info
と relay-log.info
ファイルのコンテンツの更新もします。
MASTER_USER
、MASTER_PASSWORD
、MASTER_SSL
、MASTER_SSL_CA
、MASTER_SSL_CAPATH
、MASTER_SSL_CERT
、MASTER_SSL_KEY
、そして MASTER_SSL_CIPHER
はどのようにマスタに接続すかという事について情報を提供します。
SSL オプション(MASTER_SSL
、MASTER_SSL_CA
、MASTER_SSL_CAPATH
、MASTER_SSL_CERT
、MASTER_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_HOST
と MASTER_PORT
はマスタホストと、その TCP/IP ポートのホスト名(または IP アドレス) です。 もし MASTER_HOST
が localhost
と同等であれば、その時は MySQL の別の部分と同じで、ポート番号は無視されるという事に注意してください。(例えば、もし Unix ソケットファイルが利用できる場合)
もし MASTER_HOST
か MASTER_PORT
を指定すると、スレーブはマスタ サーバが以前とは違うと仮定します。(たとえ現在の値と等しいホストやポート値を指定したとしても)この場合、マスタ
バイナリ ログ名と位置の古い値は適応しないとみなされる為、もしステートメント内の MASTER_LOG_FILE
と MASTER_LOG_POS
を指定しなければ、MASTER_LOG_FILE=''
と MASTER_LOG_POS=4
が静かにそれに加えられます。
MASTER_LOG_FILE
と MASTER_LOG_POS
は、次にスレットがスタートするマスタから、スレーブ I/O スレッドが読み込みを始めなければいけない座標です。もしそれらのどちもを指定しなければ、RELAY_LOG_FILE
か RELAY_LOG_POS
を指定する事ができません。もし MASTER_LOG_FILE
も MASTER_LOG_POS
も指定されなければ、CHANGE MASTER
が発行される前に、スレーブは slave SQL thread の最後の座標を利用します。これは、ただ単に使用するパスワードを変更したいだけの時に、スレーブ I/O スレッドと比べてスレーブ SQL スレッドが遅かったとしても、複製内に切れ目がない事を保証します。
CHANGE MASTER
は、RELAY_LOG_FILE
か RELAY_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.info
と relay-log.info
ファイルを削除し、そして元のオプションを利用してサーバを再スタートさせてください。
MASTER_HOST
オプション(たとえダミー値を利用していても) を指定するには、それがスレーブだとマスタに信じさせる事が必要です。
LOAD DATA FROM MASTER
構文LOAD DATA FROM MASTER
この機能は終了しました。今後は使わないことを勧めます。MySQLの将来のバージョンでは取り除かれることもあります。
LOAD DATA FROM MASTER
と LOAD TABLE FROM MASTER
の現在のインプリメンテーションがとても制限されているので、これらのステートメントは MySQL のバージョン 4.1 以降では廃止予定です。今後のバージョンでは、さらに進歩した技術(「online backup」 と呼ばれる物) を紹介する予定です。その技術は、さらに多くのストレージ エンジンと機能する更なる利点を持ちます。
MySQL 5.1 以前のバージョンで LOAD DATA FROM MASTER
か LOAD TABLE FROM MASTER
を利用する為に推奨する代替方法は、mysqldump か mysqlhotcopy を利用する事です。後者は Perl と2つの Perl モジュール(DBI
と DBD:mysql
)を必要とし、MyISAM
と ARCHIVE
テーブルにだけ機能します。mysqldump を利用すると、マスタ上に SQL ダンプを作成でき、それらをスレーブ上の mysql クライアントにパイプ(またはコピー)できます。これは全てのストレージ エンジンに機能するという利点を持ちますが、SELECT
を利用して機能する為スピードが大変遅いです。
このステートメントは、マスタのスナップショットを撮り、それをスレーブにコピーします。それは、スレーブが正しい位置から複製を始めるように MASTER_LOG_FILE
と MASTER_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_timeout
と net_write_timeout
の値を増やす必要があるでしょう。詳しくは 項 「システム変数」 を参照してください。
LOAD DATA FROM MASTER
は mysql
データベースから何もコピー しない 事に注意してください。これは、マスタとスレーブ上で異なるユーザと権限を持つ事を簡単にします。
LOAD DATA FROM MASTER
を利用する為には、 マスタに接続する為に利用される複製アカウントはマスタ上に RELOAD
と SUPER
権限を持ち、ロードしたい全てのマスタ テーブルに SELECT
権限を持つ必要があります。ユーザが SELECT
権限を持たない全てのマスタ テーブルは LOAD DATA FROM MASTER
に無視されます。これは、マスタがユーザからそれらを隠す為に起こります。LOAD DATA FROM MASTER
は、ロードするデータベースを知る為に SHOW DATABASES
をコールしますが、SHOW DATABASES
はユーザが何かしらの権限を持つデータベースだけを返します。詳しくは 項11. 「SHOW DATABASES
構文」 を参照してください。スレーブ サイドでは、LOAD DATA FROM MASTER
を発行するユーザはデータベースをドロップし作成する権限と、コピーされるテーブルを持つ必要があります。
LOAD TABLE tbl_name FROM MASTER
構文LOAD TABLE tbl_name
FROM MASTER
この機能は終了しました。今後は使わないことを勧めます。MySQLの将来のバージョンでは取り除かれることもあります。
LOAD DATA FROM MASTER
と LOAD TABLE FROM MASTER
の現在のインプリメンテーションがとても制限されているので、これらのステートメントは MySQL のバージョン 4.1 以降では廃止予定です。今後のバージョンでは、さらに進歩した技術(「online backup」 と呼ばれる物) を紹介する予定です。その技術は、さらに多くのストレージ エンジンと機能する更なる利点を持ちます。
MySQL 5.1 以前のバージョンで LOAD DATA FROM MASTER
か LOAD TABLE FROM MASTER
を利用する為に推奨する代替方法は、mysqldump か mysqlhotcopy を利用する事です。後者は Perl と2つの Perl モジュール(DBI
と DBD:mysql
)を必要とし、MyISAM
と ARCHIVE
テーブルにだけ機能します。mysqldump を利用すると、マスタ上に SQL ダンプを作成でき、それらをスレーブ上の mysql クライアントにパイプ(またはコピー)できます。これは全てのストレージ エンジンに機能するという利点を持ちますが、SELECT
を利用して機能する為スピードが大変遅いです。
マスタからスレーブにテーブルのコピーをトランスファします。このステートメントは主に LOAD DATA FROM MASTER
操作をデバッグしながらインプリメントされます。LOAD TABLE
を利用するには、マスタ サーバに接続するのに利用されるアカウントはマスタ上に RELOAD
と SUPER
権限を持ち、マスタ テーブルをロードする為に SELECT
権限を持つ必要があります。スレーブ サイドでは、LOAD TABLE FROM MASTER
を発行するユーザはテーブルをドロップし作成する権限を持つ必要があります。
LOAD DATA FROM MASTER
の条件もこれに適応します。例えば、LOAD TABLE FROM MASTER
は MyISAM
テーブルに対してのみ機能します。
LOAD DATA FROM MASTER
のタイム アウト ノートもこれに適応します。
MASTER_POS_WAIT()
構文SELECT MASTER_POS_WAIT('master_log_file
',master_log_pos
)
このオプションはステートメントではなく関数です。これはスレーブがマスタのバイナリ ログ内の指定された位置までのイベントを読み込み、実行した事を保証する為に利用されます。完全な説明は 項 「その他の関数」 を参照してください。
RESET SLAVE
構文RESET SLAVE
RESET SLAVE
がスレーブがマスタのバイナリ ログ内の複製位置を忘れるよう働きかけます。このステートメントは再スタートの時に利用する為の物です。これは master.info
と relay-log.info
ファイル、全てのリレー ログを削除し、そして新しいリレー ログをスタートします。
注意:スレーブ SQL スレッドによって完全に実行されていなくても全てのリレー ログが削除されます。(もし STOP SLAVE
ステートメントを発行していたり、スレーブが高負荷であると、複製スレーブ上にこの状態が存在しやすくなります。)
master.info
ファイル内に格納された接続情報は、対応するスタートアップ オプション内で指定された値を利用して速やかにリセットされます。この情報は、マスタ
ホスト、マスタ ポート、マスタ ユーザ、そしてマスタ パスワードのような値を含みます。もしスレーブ SQL スレッドが停止した時テンポラリ テーブルの複製の最中で、そして
RESET SLAVE
が発行されると、これらの複製テンポラリ テーブルはスレーブ上で削除されます。
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
構文SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N
このステートメントは、マスタから次の N
イベントをスキップします。これはステートメントによって引き起こされた複製から回復するのに役に立ちます。
このステートメントは、スレーブ スレッドが起動していない時のみ有効です。そうでなければ、エラーを発生させます。
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_Running
は YES
です。
Slave_SQL_Running
SQL スレッドがスタートしたかどうか
Replicate_Do_DB
、Replicate_Ignore_DB
もしあるなら、--replicate-do-db
と --replicate-ignore-db
オプションを利用して指定されたデータベースのリスト。
Replicate_Do_Table
、Replicate_Ignore_Table
、Replicate_Wild_Do_Table
、Replicate_Wild_Ignore_Table
もしあるなら、--replicate-do-table
、--replicate-ignore-table
、--replicate-wild-do-table
、そして --replicate-wild-ignore_table
オプションを利用して指定されたテーブルのリスト。
Last_Errno
、Last_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_File
と Exec_Master_Log_Pos
)はリレーログ内の(Relay_Log_File
と Relay_Log_Pos
)に対応しています。
Relay_Log_Space
全ての既存リレー ログを合計したサイズ。
Until_Condition
、Until_Log_File
、Until_Log_Pos
START SLAVE
ステートメントの UNTIL
条項内で指定された値。
Until_Condition
は3つの値を持ちます。
UNTIL
条項が指定されなければ None
。
もしスレーブがマスタのバイナリ ログ内の指定位置まで読み込んでいたら Master
。
もしスレーブがそのリレー ログ内の指定位置まで読み込んでいたら Relay
。
Until_Log_File
と Until_Log_Pos
は、SQL スレッドが実行を停止するポイントを定義するログ ファイル名と位置の値を指示します。
Master_SSL_Allowed
、Master_SSL_CA_File
、Master_SSL_CA_Path
、Master_SSL_Cert
、Master_SSL_Cipher
、Master_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 からであったり、直接の更新からの一番最近のタイムスタンプであったりする為、その値はランダムに外れる、という事です。
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 SLAVE
は SUPER
権限を必要とします。
もし START SLAVE
がスレーブ スレッドのスタートに成功すると、エラー無しで返ります。しかし、そのよう場場合でも、スレーブ スレッドがスタートし、その後停止する、という事になり得ます。(例えば、マスタに接続できなかったり、マスタのバイナリログを読めなかったり、それ以外の問題の為)START SLAVE
からはこれについての警告はありません。スレーブ スレッドによって発生したエラー メッセージに対するスレーブのエラー ログの確認、また SHOW SLAVE STATUS
を利用してそれらが満足に機能している事を確認する必要があります。
どのスレッドをスタートするかを指定する為に、ステートメントに IO_THREAD
と SQL_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 内でいまだに後方互換の為に許容されていますが、廃止予定になっています。
STOP SLAVE
構文STOP SLAVE [thread_type
[,thread_type
] ... ]thread_type
: IO_THREAD | SQL_THREAD
スレーブ スレッドを停止します。STOP SLAVE
は SUPER
権限を必要とします。
START SLAVE
のように、このステートメントは、スレッドに名前を付けたり、スレッドを停止したりする為に IO_THREAD
や SQL_THREAD
オプションと共に利用されます。
MySQL の古いバージョン内では(4.0.5以前)、このステートメントは SLAVE STOP
と呼ばれていました。この利用方法は MySQL 5.1 内でいまだに後方互換の為に許容されていますが、廃止予定になっています。