このセクションでは、MySQL 5.6 で GTID ベースレプリケーションを構成および起動するためのプロセスについて説明します。これは、レプリケーションマスターをはじめて起動しているか、停止できることを前提とする「コールドスタート」手順です。動作中マスターから GTID を使用したレプリケーションスレーブのプロビジョニングについては、セクション17.1.3.3「フェイルオーバーおよびスケールアウトでの GTID の使用」を参照してください。
最大限単純な GTID レプリケーショントポロジー (1 つのマスターと 1 つのスレーブで構成) を起動するこのプロセスの主要手順は、次のとおりです。
レプリケーションがすでに動作している場合、両方のサーバーを読み取り専用にすることでそれらを同期します。
両方のサーバーを停止します。
-
GTID、バイナリロギング、およびスレーブ更新ロギングを有効にし、GTID ベースレプリケーションに安全でないステートメントを無効にした状態で、両方のサーバーを再起動します。また、サーバーは読み取り専用モードで起動し、スレーブ SQL および I/O スレッドがスレーブで起動されないようにしてください。
説明したサーバーを起動するために必要な mysqld オプションについては、このセクションの後半の例で説明します。
-
マスターをレプリケーションデータソースとして使用し、自動ポジショニングを使用するように、スレーブに指示してから、スレーブを起動します。
この手順の実施に必要な SQL ステートメントは、このセクションの後半の例で説明します。
更新を再度受け取ることができるように、両方のサーバーの読み取り専用モードを無効にします。
次の例では、2 つのサーバーが MySQL の 「クラシック」ファイルベースレプリケーションプロトコルを使用してマスターおよびスレーブとしてすでに動作しています。
後続のほとんどの手順では、SUPER
権限を持つ MySQL root
アカウントまたは別の MySQL ユーザーアカウントを使用する必要があります。mysqladmin shutdown
には、SUPER
権限または SHUTDOWN
権限が必要です。
手順 1: サーバーを同期します
サーバーを読み取り専用にします。これを行うには、次のステートメントを両方のサーバーで実行することで、read_only
システム変数を有効にします。
mysql> SET @@GLOBAL.read_only = ON;
すると、スレーブはマスターに追い付くことができます。続行する前にスレーブがすべての更新を処理したことを確認することが非常に重要です。
手順 2: 両方のサーバーを停止します。
ここで示すように、mysqladmin を使用して各サーバーを停止します。ここで、username
はサーバーをシャットダウンするのに十分な権限を持つ MySQL ユーザーのユーザー名です。
shell> mysqladmin -uusername -p shutdown
次に、プロンプトにこのユーザーのパスワードを指定します。
手順 3: GTID を有効にした状態で両方のサーバーを再起動します グローバルトランザクション識別子でバイナリロギングを有効にするには、GTID モード、バイナリロギング、およびスレーブ更新ロギングを有効にし、GTID ベースレプリケーションに安全でないステートメントを無効にした状態で、各サーバーを起動する必要があります。また、読み取り専用モードで両方のサーバーを起動することで不要または予期しない更新がどちらかのサーバーで実行されないようにしてください。これは、両方のサーバーは (少なくとも) 次の mysqld_safe 呼び出しで示すオプションで起動する必要があることを意味します。
shell> mysqld_safe --gtid_mode=ON --log-bin --log-slave-updates --enforce-gtid-consistency &
MySQL 5.6.9 より前では、--enforce-gtid-consistency
の名前は --disable-gtid-unsafe-statements
でした。
また、ここで示す例で指定したほかのサーバーオプションと --skip-slave-start
オプションでスレーブを起動してください。
--gtid-mode
はブールではなく、列挙です。このオプションを設定するときは、値 ON
または OFF
の一方だけを使用します。0 や 1 などの数値を使用すると、予期しない結果になる場合があります。
--gtid-mode
および --enforce-gtid-consistency
サーバーオプションの詳細については、セクション17.1.4.5「グローバルトランザクション ID のオプションと変数」を参照してください。
構成に応じて、mysqld_safe またはほかの mysqld 起動スクリプトに追加オプションを指定します。
手順 4: マスターを使用するようにスレーブに指示します
マスターをレプリケーションデータソースとして使用し、ファイルベースポジショニングではなく GTID ベース自動ポジショニングを使用するように、スレーブに指示します。トランザクションが GTID で識別されることをスレーブに伝える MASTER_AUTO_POSITION
オプションを使用して、スレーブで CHANGE MASTER TO
ステートメントを実行します。
マスターのホスト名とポート番号、およびマスターへの接続にスレーブが使用できるレプリケーションユーザーアカウントのユーザー名とパスワードの適切な値を指定する必要がある場合もあります。これらが手順 1 より前にすでに設定されていて、変更する必要がない場合、対応するオプションをここで示すステートメントから安全に省略できます。
mysql> CHANGE MASTER TO
> MASTER_HOST = host,
> MASTER_PORT = port,
> MASTER_USER = user,
> MASTER_PASSWORD = password,
> MASTER_AUTO_POSITION = 1;
MASTER_LOG_FILE
オプションと MASTER_LOG_POS
オプションは、MASTER_AUTO_POSITION
が 1 に設定されているときに使用できない場合があります。そのように試みると、CHANGE MASTER TO
ステートメントはエラーで失敗します。(GTID ベースレプリケーションからファイルと位置に基づくレプリケーションに戻る必要がある場合、CHANGE MASTER TO
ステートメントで MASTER_AUTO_POSITION = 0
とともにこれらのオプションの 1 つまたは両方を使用する必要があります。)
CHANGE MASTER TO
ステートメントが成功したことを前提として、このようにスレーブを起動できます。
mysql> START SLAVE;
手順 5: 読み取り専用モードを無効にします 次のステートメントを実行することで、マスターは更新の受け付けを再度開始できます。
mysql> SET @@GLOBAL.read_only = OFF;
これで、GTID ベースレプリケーションは動作中になり、マスターで前のようにアクティビティーを開始 (または再開) できます。セクション17.1.3.3「フェイルオーバーおよびスケールアウトでの GTID の使用」では、GTID 使用時の新しいスレーブの作成について説明します。