Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  既存のレプリケーション環境への追加スレーブの導入

17.1.1.9 既存のレプリケーション環境への追加スレーブの導入

既存のレプリケーション構成に別のスレーブを追加する場合は、マスターを停止することなく実行できます。代わりに、既存のスレーブのコピーを作成することで新しいスレーブをセットアップしますが、新しいスレーブは別の server-id 値で構成します。

既存のスレーブを複製するには、次のようにします。

  1. 既存のスレーブをシャットダウンします。

    shell> mysqladmin shutdown
  2. 既存のスレーブから新しいスレーブにデータディレクトリをコピーします。これを行うには、tar または WinZip を使用してアーカイブを作成するか、cprsync などのツールを使用して直接コピーを実行します。ログファイルとリレーログファイルを確実にコピーしてください。

    新しいレプリケーションスレーブを追加するときに直面するよくある問題は、次のような一連の警告またはエラーメッセージで新しいスレーブが失敗することです。

    071118 16:44:10 [Warning] Neither --relay-log nor --relay-log-index were used; so
    replication may break when this MySQL server acts as a slave and has his hostname
    changed!! Please use '--relay-log=new_slave_hostname-relay-bin' to avoid this problem.
    071118 16:44:10 [ERROR] Failed to open the relay log './old_slave_hostname-relay-bin.003525'
    (relay_log_pos 22940879)
    071118 16:44:10 [ERROR] Could not find target log during relay log initialization
    071118 16:44:10 [ERROR] Failed to initialize the master info structure

    これは、--relay-log オプションが指定されていない場合、リレーログファイルにそれらのファイル名の一部としてホスト名が含まれているためです。(これは、--relay-log-index オプションが使用されていない場合のリレーログインデックスファイルにも当てはまります。これらのオプションの詳細については、セクション17.1.4「レプリケーションおよびバイナリロギングのオプションと変数」を参照してください。

    この問題を回避するには、新しいスレーブの --relay-log に対して、既存のスレーブで使用されたものと同じ値を使用します。(このオプションが既存のスレーブで明示的に設定されなかった場合は、existing_slave_hostname-relay-bin を使用します。)これができない場合、既存のスレーブのリレーログインデックスファイルを新しいスレーブにコピーし、新しいスレーブの --relay-log-index オプションを既存のスレーブで使用されていたものに設定します。(このオプションが既存のスレーブで明示的に設定されなかった場合は、existing_slave_hostname-relay-bin.indexを使用します。)また、すでに新しいスレーブを起動しようとして (このセクションの残りの手順に従ったあとに)、前に説明したものと同じようなエラーが発生した場合は、次の手順を実行します。

    1. まだそのようにしていなかった場合は、新しいスレーブで STOP SLAVE を発行します。

      すでに既存のスレーブを再度起動した場合は、既存のスレーブでも STOP SLAVE を発行します。

    2. 既存のスレーブのリレーログインデックスファイルの内容を新しいスレーブのリレーログインデックスファイルにコピーして、確実にファイルの既存の内容を上書きします。

    3. このセクションの残りの手順に進みます。

  3. マスター情報およびリレーログ情報リポジトリを既存のスレーブから新しいスレーブにコピーします (セクション17.2.2「レプリケーションリレーおよびステータスログ」を参照してください)。これらは、マスターのバイナリログとスレーブのリレーログの現在のログ座標を保持しています。

  4. 既存のスレーブを起動します。

  5. 新しいスレーブで構成を編集し、マスターまたは既存のスレーブのいずれかで使用されていない一意 server-id を新しいスレーブに割り当てます。

  6. 新しいスレーブを起動します。スレーブは、そのマスター情報リポジトリ内の情報を使用して、レプリケーションプロセスを開始します。


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
  Posted by Gary Fischman on November 11, 2013
This process can produce unpredictable results if the new slave is running a different version of MySQL from the existing slave. Instead, use mysqldump to create the new slave. It takes longer to import the dump file, but the result is a reliable, stable slave.

Procedure is documented in the mysqldump docs.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html