オンラインサーバーのレプリケーションモードを安全に構成できるようにするには、レプリケーションのいくつかの重要な概念を理解することが重要です。 このセクションでは、オンラインサーバーのレプリケーションモードを変更する前に、これらの概念について説明し、不可欠な読み取り値を示します。
MySQL で使用可能なレプリケーションのモードは、ログに記録されるトランザクションを識別するための様々な手法に依存します。 レプリケーションで使用されるトランザクションのタイプは次のとおりです:
GTID トランザクションは、
UUID:NUMBER
形式のグローバルトランザクション識別子 (GTID) によって識別されます。 ログ内の GTID トランザクションはすべて、常にGtid_log_event
で始まります。 GTID トランザクションは GTID を使用するか、ファイル名とポジションを使用して対処できます。匿名トランザクションに GTID が割り当てられておらず、MySQL はログ内のすべての匿名トランザクションの前に
Anonymous_gtid_log_event
があることを確認します。 以前のバージョンでは、匿名トランザクションの前に特定のイベントはありませんでした。 匿名トランザクションは、ファイル名と位置を使用してのみ処理できます。
GTID を使用する場合は、GTID 自動配置および自動フェイルオーバーを利用したり、WAIT_FOR_EXECUTED_GTID_SET()
、session_track_gtids
を使用したり、「パフォーマンススキーマ」テーブルを使用してレプリケートされたトランザクションをモニターしたりできます。
以前のバージョンの MySQL を実行しているソースから受信されたリレーログ内のトランザクションの前には、特定のイベントがまったく表示されない場合がありますが、リプレイされてレプリカバイナリログに記録されたあとは、それらのトランザクションの前に Anonymous_gtid_log_event
が付きます。
レプリケーションモードをオンラインで構成する機能は、gtid_mode
変数と enforce_gtid_consistency
変数の両方が動的になり、グローバルシステム変数の設定に十分な権限を持つアカウントによって最上位レベルのステートメントから設定できることを意味します。 セクション5.1.9.1「システム変数権限」を参照してください。 MySQL 5.6 以前では、これらの変数は両方とも、サーバーの起動時に適切なオプションを使用してのみ構成できました。つまり、レプリケーションモードへの変更にはサーバーの再起動が必要でした。 すべてのバージョンで、gtid_mode
を ON
または OFF
に設定でき、GTID がトランザクションの識別に使用されたかどうかに対応します。 gtid_mode=ON
で匿名トランザクションをレプリケートできない場合、および gtid_mode=OFF
でレプリケートできるのは匿名トランザクションのみです。 gtid_mode=OFF_PERMISSIVE
の場合、new トランザクションは匿名ですが、レプリケートされたトランザクションを GTID または匿名トランザクションにすることを許可します。 gtid_mode=ON_PERMISSIVE
の場合、new トランザクションは GTID を使用しますが、レプリケートされたトランザクションを GTID または匿名トランザクションにすることを許可します。 つまり、匿名トランザクションと GTID トランザクションの両方を使用するサーバーを持つレプリケーショントポロジを使用できます。 たとえば、gtid_mode=ON
を含むソースは、gtid_mode=ON_PERMISSIVE
を使用してレプリカにレプリケートできます。 gtid_mode
の有効な値は次のとおりで、順序は次のとおりです:
OFF
OFF_PERMISSIVE
ON_PERMISSIVE
ON
gtid_mode
の状態は、前述の順序に基づいて一度に 1 つのステップでのみ変更できることに注意してください。 たとえば、gtid_mode
が現在 OFF_PERMISSIVE
に設定されている場合、OFF
または ON_PERMISSIVE
に変更できますが、ON
には変更できません。 これは、匿名トランザクションから GTID トランザクションへの変更プロセスがサーバーによって正しく処理されるようにするためです。 gtid_mode=ON
と gtid_mode=OFF
を切り替えると、GTID 状態 (つまり、gtid_executed
の値) は永続的になります。 これにより、gtid_mode
のタイプ間の変更に関係なく、サーバーによって適用された GTID セットが常に保持されます。
GTID に関連するフィールドには、現在選択されている gtid_mode
に関係なく、正しい情報が表示されます。 つまり、GTID セットを表示するフィールド (replication_connection_status
「パフォーマンススキーマ」テーブルの gtid_executed
, gtid_purged
, RECEIVED_TRANSACTION_SET
など) および SHOW REPLICA | SLAVE STATUS
の GTID 関連の結果は、GTID が存在しない場合に空の文字列を返すようになりました。 GTID トランザクションが使用されていないときに、パフォーマンススキーマ replication_applier_status_by_worker
テーブル内の CURRENT_TRANSACTION
などの単一 GTID を表示するフィールドに ANONYMOUS
が表示されるようになりました。
gtid_mode=ON
を使用するソースからのレプリケーションでは、CHANGE REPLICATION SOURCE TO
ステートメント (MySQL 8.0.23 から) の SOURCE_AUTO_POSITION
、または CHANGE MASTER TO
ステートメント (MySQL 8.0.23 より前) の MASTER_AUTO_POSITION
を使用して構成された GTID 自動配置を使用できます。 使用されるレプリケーショントポロジは、自動配置を有効にできるかどうかに影響します。この機能は GTID に依存し、匿名トランザクションと互換性がないためです。 自動配置を有効にする前に、トポロジに匿名トランザクションが残っていないことを確認することを強くお薦めします。セクション17.1.4.2「GTID トランザクションのオンラインでの有効化」 を参照してください。
次のテーブルに、gtid_mode
とソースおよびレプリカでの自動配置の有効な組合せを示します。ここで、ソース gtid_mode
は水平方向に、レプリカ gtid_mode
は垂直方向に表示されます。 各エントリの意味は次のとおりです:
Y
: ソースとレプリカのgtid_mode
に互換性がありますN
: ソースとレプリカのgtid_mode
に互換性がありません*
: この組合せでは自動配置を使用できます
表 17.1 ソースとレプリカ gtid_mode の有効な組合せ
|
ソース |
ソース |
ソース |
ソース |
---|---|---|---|---|
レプリカ |
Y |
Y |
N |
N |
レプリカ |
Y |
Y |
Y |
Y* |
レプリカ |
Y |
Y |
Y |
Y* |
レプリカ |
N |
N |
Y |
Y* |
現在選択されている gtid_mode
は、gtid_next
変数にも影響します。 次のテーブルに、gtid_mode
および gtid_next
の様々な値に対するサーバーの動作を示します。 各エントリの意味は次のとおりです:
ANONYMOUS
: 匿名トランザクションを生成します。Error
: エラーを生成し、SET GTID_NEXT
の実行に失敗します。UUID:NUMBER
: 指定された UUID:NUMBER の GTID を生成します。New GTID
: 自動生成された番号を使用して GTID を生成します。
表 17.2 gtid_mode と gtid_next の有効な組合せ
バイナリログオン |
バイナリログオフ |
|
|
|
---|---|---|---|---|
|
ANONYMOUS |
ANONYMOUS |
ANONYMOUS | エラー |
|
ANONYMOUS |
ANONYMOUS |
ANONYMOUS |
UUID:NUMBER |
|
新規 GTID |
ANONYMOUS |
ANONYMOUS |
UUID:NUMBER |
|
新規 GTID |
ANONYMOUS |
エラー |
UUID:NUMBER |
バイナリログがオフで、gtid_next
が AUTOMATIC
に設定されている場合、GTID は生成されません。 これは、以前のバージョンの動作と一貫性があります。