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'
スレーブサーバがマスタサーバとの接続および通信のために使用しているパラメータを変更します。
以下、可能な master_def
の値を示します。
リレーログオプション(RELAY_LOG_FILE
と RELAY_LOG_POS
)は、MySQL 4.0
から利用可能です。
SSL
オプション(MASTER_SSL
、MASTER_SSL_CA
、MASTER_SSL_CAPATH
、MASTER_SSL_CERT
、MASTER_SSL_KEY
、および
MASTER_SSL_CIPHER
)は、MySQL 4.1.1
から利用可能です。これらのオプションは、SSL
サポートなしでコンパイルされているスレーブでも変更できます。これは
master.info
ファイルに保存されますが、SSL
サポートが有効になっているサーバを使用するまでは無視されます。
例:
mysql>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;
mysql>CHANGE MASTER TO
->RELAY_LOG_FILE='slave-relay-bin.006',
->RELAY_LOG_POS=4025;
MASTER_USER
、MASTER_PASSWORD
、MASTER_SSL
、MASTER_SSL_CA
、MASTER_SSL_CAPATH
、MASTER_SSL_CERT
、MASTER_SSL_KEY
、および
MASTER_SSL_CIPHER
は、スレーブがマスタに接続するために必要な情報です。これらの情報を指定しなければ、以前の値がそのまま使用されます。たとえば、MySQL
マスタへの接続パスワードが変更された場合は、以下を実行し、
mysql>STOP SLAVE; -- if replication was running
mysql>CHANGE MASTER TO MASTER_PASSWORD='new3cret';
mysql>START SLAVE; -- if you want to restart replication
スレーブに対して新しいパスワードを指定します。変更しない情報(ホスト、ポート、ユーザなど)については指定する必要がありません。
MASTER_HOST
と
MASTER_PORT
は、マスタホストのホスト名または IP
アドレスと、その TCP ポートです。注意:
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
発行前のスレーブ SQL
スレッドの最後の座標が使用されます。これにより、スレーブ
SQL スレッドがスレーブ I/O
スレッドより遅い場合でも、たとえばパスワードだけを変更するときなど、レプリケーションに途切れが生じません。この安全な動作は、MySQL
4.0.17 から 4.1.1
で導入されました。これらのバージョンの前は、CHANGE
MASTER
発行前のスレーブ I/O
スレッドの最後の座標が使用されていました。そのため、SQL
スレッドがマスタからのイベントを失い、レプリケーションが破綻することがありました。
CHANGE MASTER
はすべてのリレーログを削除します(新規リレーログを開始)。ただし、RELAY_LOG_FILE
または RELAY_LOG_POS
を指定した場合はこれを実行しません。リレーログは保持されます(MySQL
4.1.1 から、RELAY_LOG_PURGE
グローバル変数はサイレントで 0
に設定されます)。CHANGE MASTER TO
は、master.info
と
relay-log.info
を更新します。
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'
etc
)は、マスタとマスタのバイナリログの座標を変更します。これは、スレーブにマスタのレプリケートを実行させる場合です。
2
番目の例は、使用頻度は低いですが、何らかの理由でスレーブのリレーログを再度実行する場合です。この際、マスタに接続する必要はなく、CHANGE
MASTER TO
を実行して SQL
スレッドを開始するだけです(START SLAVE
SQL_THREAD
)。
これは、レプリケーション以外で、スタンドアロンで非スレーブのサーバのクラッシュ後のリカバリにも使用できます。
サーバがクラッシュし、バックアップをリストアしたとします。
サーバのバイナリログ(リレーログではなく通常のバイナリログ)を再度実行します。このログの名前を
myhost-bin.*
と仮定します。万が一、以下の手順に忠実に従わず、サーバにバイナリログをパージさせてしまった事態に備えて、まず、これらのバイナリログのバックアップコピーを安全な場所に作成しておきます。
MySQL 4.1.1
以降を使用している場合、さらに安全対策として
SET GLOBAL RELAY_LOG_PURGE=0
を実行します。 次に、log-bin
なしで、新しい(以前とは別の)サーバ
ID、relay-log=myhost-bin
(サーバに、通常のバイナリログをリレーログと思い込ませるため)、および
skip-slave-start
でサーバを起動し、以下のステートメントを発行します。
mysql>CHANGE MASTER TO
->RELAY_LOG_FILE='myhost-bin.153',
->RELAY_LOG_POS=410,
->MASTER_HOST='some_dummy_string';
mysql>START SLAVE SQL_THREAD;
サーバは自らのバイナリログを読み取って実行し、クラッシュリカバリを達成します。リカバリが完了したら、STOP
SLAVE
を実行してサーバをシャットダウンし、master.info
と relay-log.info
を削除して、元のオプションでサーバを再起動します。
現在のところ、サーバにスレーブであると思い込ませるために、MASTER_HOST
の指定(ダミー値でも)は必須です。また、以前とは異なるサーバ
ID
の指定も必要です。そうしないと、サーバは自分の
ID
の付いたイベントを見て循環レプリケーションであると勘違いし、そのイベントをスキップしてしまいます。将来、これらに対処するオプションを追加する予定です。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.