MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

17.4.2 レプリカの予期しない停止の処理

サーバーの予期しない停止 (クラッシュセーフとも呼ばれる) に対するレプリケーションを回復できるようにするには、レプリカが停止する前にその状態を回復できる必要があります。 このセクションでは、レプリケーション中のレプリカの予期しない停止の影響、およびレプリケーションを続行するためのリカバリの最善の機会を得るためのレプリカの構成方法について説明します。

レプリカの予期しない停止後、再起動時に、レプリケーション SQL スレッドは、すでに実行されているトランザクションに関する情報をリカバリする必要があります。 リカバリに必要な情報は、レプリカアプライアンスのメタデータリポジトリに格納されます。 MySQL 8.0 から、このリポジトリは mysql.slave_relay_log_info という名前の InnoDB テーブルとしてデフォルトで作成されます。 このトランザクションストレージエンジンを使用すると、再起動時に情報が常に回復可能になります。 アプライヤメタデータリポジトリへの更新は、トランザクションとともにコミットされます。つまり、予期しないサーバーが停止した場合でも、そのリポジトリに記録されるレプリカ進捗情報は、常にデータベースに適用されているものと一貫性があります。 適用者メタデータリポジトリの詳細は、セクション17.2.4「リレーログおよびレプリケーションメタデータリポジトリ」 を参照してください。

DML トランザクションおよびアトミック DDL は、アトミック操作としてのデータベースへの変更の適用とともに、mysql.slave_relay_log_info テーブルのレプリカアプリケーションメタデータリポジトリ内のレプリケーション位置を更新します。 完全にアトミックではない DDL ステートメントや、アトミック DDL をサポートしない除外されたストレージエンジンなど、ほかのすべての場合、サーバーが予期せず停止した場合、レプリケートされたデータに関連付けられた更新が mysql.slave_relay_log_info テーブルに失われる可能性があります。 この場合、更新のリストアは手動プロセスです。 MySQL 8.0 でのアトミック DDL のサポートおよび特定のステートメントのレプリケーションの結果の動作の詳細は、セクション13.1.1「アトミックデータ定義ステートメントのサポート」 を参照してください。

予期しない停止からレプリカをリカバリするリカバリプロセスは、レプリカの構成によって異なります。 リカバリプロセスの詳細は、レプリケーションの選択した方法、レプリカがシングルスレッドかマルチスレッドか、および関連するシステム変数の設定の影響を受けます。 リカバリプロセスの全体的な目的は、予期しない停止が発生する前にレプリカデータベースにすでに適用されているトランザクションを識別し、予期しない停止の後にレプリカが見逃したトランザクションを取得して適用することです。

GTID ベースのレプリケーションを使用すると、予期しない停止に対して回復可能になるようにレプリケーションを構成することがもっとも簡単になります。 GTID 自動配置とは、適用されたトランザクションのシーケンスにギャップがある場合でも、レプリカが欠落しているトランザクションを確実に識別して取得できることを意味します。

次の情報は、レプリケーションの制御下にあるかぎりリカバリを保証するために、様々なタイプのレプリカに適した設定の組合せを提供します。

重要

レプリケーションの制御外の一部の要因は、レプリケーションリカバリプロセスおよびリカバリプロセス後のレプリケーションの全体的な状態に影響を与える可能性があります。 特に、個々のストレージエンジンの回復プロセスに影響する設定では、レプリカが予期せず停止したためにトランザクションが失われ、レプリケーションリカバリプロセスで使用できなくなる可能性があります。 次のリストに示す innodb_flush_log_at_trx_commit=1 設定は、トランザクションで InnoDB を使用するレプリケーション設定の主要な設定です。 ただし、InnoDB またはほかのストレージエンジン (特にフラッシュまたは同期に関連するもの) に固有のほかの設定も影響を与える可能性があります。 選択したストレージエンジンによって作成されたクラッシュセーフ設定に関する推奨事項を常にチェックして適用します。

レプリカの次の設定の組合せは、予期しない停止に対する最も回復力があります:

マルチスレッドレプリカの場合、relay_log_recovery = ON を設定すると、リレーログから実行された一連のトランザクションの不整合およびギャップが自動的に処理されます。 これらのギャップは、ファイル位置ベースのレプリケーションが使用されている場合に発生することがあります。 (詳細は、セクション17.5.1.34「レプリケーションとトランザクションの非一貫性」 を参照してください。) リレーログリカバリプロセスは、START REPLICA | SLAVE UNTIL SQL_AFTER_MTS_GAPS ステートメントと同じ方法を使用してギャップを処理します。 レプリカが一貫性のないギャップのない状態に達すると、リレーログリカバリプロセスが進行し、レプリケーション SQL スレッド位置からソースからさらにトランザクションがフェッチされます。 GTID ベースのレプリケーションが使用されている場合、このプロセスは不要であり、MASTER_AUTO_POSITIONON に設定されている場合、MySQL 8.0.18 からマルチスレッドレプリカはリレーログのリカバリを自動的にスキップするため、relay_log_recovery の設定に違いはありません。