MySQL 8.0 リファレンスマニュアル


17.2.4.2 レプリケーションメタデータリポジトリ

レプリカサーバーは、接続メタデータリポジトリと適用者メタデータリポジトリの 2 つのレプリケーションメタデータリポジトリを作成します。 レプリケーションメタデータリポジトリは、レプリカサーバーの停止後も存続します。 バイナリログファイルの位置ベースのレプリケーションを使用している場合、レプリカは再起動時に 2 つのリポジトリを読み取り、以前にソースからバイナリログを読み取り、独自のリレーログを処理していた距離を判断します。 GTID ベースのレプリケーションが使用されている場合、レプリカはその目的のためにレプリケーションメタデータリポジトリを使用しませんが、含まれている他のメタデータのために必要です。

  • レプリカ接続メタデータリポジトリには、レプリケーション I/O スレッドがレプリケーションソースサーバーに接続し、ソースバイナリログからトランザクションを取得するために必要な情報が含まれています。 このリポジトリのメタデータには、接続構成、レプリケーションユーザーアカウントの詳細、接続の SSL 設定、レプリケーション I/O スレッドがソースバイナリログから現在読み取っているファイル名と位置が含まれます。

  • レプリカ適用者メタデータリポジトリには、レプリケーション SQL スレッドがレプリカリレーログからトランザクションを読み取り、適用するために必要な情報が含まれています。 このリポジトリのメタデータには、レプリケーション SQL スレッドがリレーログ内のトランザクションを実行したファイル名と位置、およびソースバイナリログ内の同等の位置が含まれます。 また、ワーカースレッドの数やチャネルの PRIVILEGE_CHECKS_USER アカウントなど、トランザクションを適用するプロセスのメタデータも含まれます。

接続メタデータリポジトリは mysql システムスキーマの slave_master_info テーブルに書き込まれ、適用者メタデータリポジトリは mysql システムスキーマの slave_relay_log_info テーブルに書き込まれます。 mysqld がレプリケーションメタデータリポジトリのテーブルを初期化できないが、レプリカの起動を続行できる場合は、警告メッセージが発行されます。 この状況は、リポジトリのテーブルの使用をサポートしていない MySQL のバージョンから、サポートされているバージョンにアップグレードする場合に最も発生する可能性があります。

重要
  1. mysql.slave_master_info または mysql.slave_relay_log_info テーブルの行を手動で更新または挿入しないでください。 そのようにすることは、未定義の動作になる可能性があり、サポートされていません。 レプリケーションの進行中は、slave_master_info テーブルと slave_relay_log_info テーブルのいずれかまたは両方で書込みロックを必要とするステートメントの実行は許可されません (ただし、読取りのみを実行するステートメントはいつでも許可されます)。

  2. 接続メタデータリポジトリテーブル mysql.slave_master_info のアクセス権限は、ソースに接続するためのレプリケーションユーザーアカウント名とパスワードが含まれているため、データベース管理者に制限する必要があります。 このテーブルを含むデータベースバックアップを保護するには、制限付きアクセスモードを使用します。 MySQL 8.0.21 から、レプリケーションユーザーアカウントの資格証明を接続メタデータリポジトリからクリアし、かわりにレプリケーションチャネルを起動する START REPLICA | SLAVE ステートメントまたは START GROUP_REPLICATION ステートメントを使用してそれらを常に指定できます。 このアプローチでは、レプリケーションチャネルを再起動するためにオペレータの介入が常に必要ですが、アカウント名とパスワードはレプリケーションメタデータリポジトリに記録されません。

RESET REPLICA | SLAVE は、レプリケーション接続パラメータ (MySQL Server リリースによって異なります) を除いて、レプリケーションメタデータリポジトリ内のデータをクリアします。 詳細は、RESET REPLICA | SLAVE の説明を参照してください。

MySQL 8.0 より前は、レプリケーションメタデータリポジトリをテーブルとして作成するには、サーバーの起動時に master_info_repository=TABLE および relay_log_info_repository=TABLE を指定する必要がありました。 それ以外の場合、リポジトリは、master.info および relay-log.info という名前のデータディレクトリにファイルとして作成されたか、--master-info-file オプションおよび relay_log_info_file システム変数で指定された代替の名前と場所を使用して作成されました。 MySQL 8.0 からは、レプリケーションメタデータリポジトリをテーブルとして作成することがデフォルトであり、これらすべてのシステム変数の使用は非推奨になりました。

mysql.slave_master_info および mysql.slave_relay_log_info テーブルは、InnoDB トランザクションストレージエンジンを使用して作成されます。 アプライヤメタデータリポジトリテーブルへの更新は、トランザクションとともにコミットされます。つまり、予期しないサーバーが停止した場合でも、そのリポジトリに記録されるレプリカ進捗情報は、常にデータベースに適用されているものと一貫性があります。 予期しない停止に対して最も回復可能なレプリカの設定の組合せの詳細は、セクション17.4.2「レプリカの予期しない停止の処理」 を参照してください。

レプリカデータをバックアップするか、そのデータのスナップショットを転送して新しいレプリカを作成する場合は、レプリケーションメタデータリポジトリを含む mysql.slave_master_info および mysql.slave_relay_log_info テーブルを必ず含めてください。 クローニング操作の場合、レプリケーションメタデータリポジトリがテーブルとして作成されると、クローニング操作中に受信者にコピーされますが、ファイルとして作成されるとコピーされないことに注意してください。 バイナリログファイルの位置ベースのレプリケーションが使用されている場合、レプリケーションメタデータリポジトリは、復元、コピー、またはクローニングされたレプリカの再起動後にレプリケーションを再開するために必要です。 リレーログファイルはないが、まだアプライヤメタデータリポジトリがある場合は、それをチェックして、レプリケーション SQL スレッドがソースバイナリログで実行された距離を判断できます。 その後、CHANGE REPLICATION SOURCE TO ステートメント (MySQL 8.0.23 から) または CHANGE MASTER TO ステートメント (MySQL 8.0.23 より前) を SOURCE_LOG_FILE | MASTER_LOG_FILE および SOURCE_LOG_POS | MASTER_LOG_POS オプションとともに使用して、必要なバイナリログをソースログに再度読み取り、バイナリログからレプリカを読み取ることができます。

追加のリポジトリであるアプライヤワーカーメタデータリポジトリは、主に内部使用のために作成され、マルチスレッドレプリカ上のワーカースレッドに関するステータス情報を保持します。 アプライヤワーカーメタデータリポジトリには、リレーログファイルの名前と位置、および各ワーカースレッドのソースバイナリログファイルが含まれます。 アプライヤメタデータリポジトリがテーブルとして作成されている場合 (デフォルト)、アプライヤワーカーメタデータリポジトリは mysql.slave_worker_info テーブルに書き込まれます。 適用者メタデータリポジトリがファイルに書き込まれると、適用者ワーカーメタデータリポジトリが worker-relay-log.info ファイルに書き込まれます。 外部で使用するために、ワーカースレッドのステータス情報がパフォーマンススキーマ replication_applier_status_by_worker テーブルに表示されます。

レプリケーションメタデータリポジトリには、セクション13.4.2「レプリケーションサーバーを制御するための SQL ステートメント」 で説明されている SHOW REPLICA | SLAVE STATUS ステートメントの出力に示されているような情報が最初に含まれていました。 SHOW REPLICA | SLAVE STATUS ステートメントで表示されないレプリケーションメタデータリポジトリに追加された情報。

接続メタデータリポジトリの場合、次のテーブルに、mysql.slave_master_info テーブルのカラム、SHOW REPLICA | SLAVE STATUS によって表示されるカラムおよび非推奨の master.info ファイルの行の対応関係を示します。

slave_master_info テーブルのカラム SHOW REPLICA | SLAVE STATUS カラム master.info ファイル行 説明
Number_of_lines [None] 1 テーブル (またはファイル内の行) のカラム数
Master_log_name Source_Log_File 2 ソースから現在読み取られているバイナリログの名前
Master_log_pos Read_Source_Log_Pos 3 ソースから読み取られたバイナリログ内の現在の位置
Host Source_Host 4 レプリケーションソースサーバーのホスト名
User_name Source_User 5 ソースへの接続に使用されるレプリケーションユーザーアカウント名
User_password パスワード (SHOW REPLICA | SLAVE STATUS では表示されません) 6 ソースへの接続に使用されるレプリケーションユーザーアカウントのパスワード
Port Source_Port 7 レプリケーションソースサーバーへの接続に使用されるネットワークポート
Connect_retry Connect_Retry 8 レプリカがソースへの再接続を試行するまで待機する期間 (秒)
Enabled_ssl Source_SSL_Allowed 9 レプリカが SSL 接続をサポートするかどうか
Ssl_ca Source_SSL_CA_File 10 認証局 (CA) 証明書に使用されるファイル
Ssl_capath Source_SSL_CA_Path 11 認証局 (CA) 証明書へのパス
Ssl_cert Source_SSL_Cert 12 SSL 証明書ファイルの名前
Ssl_cipher Source_SSL_Cipher 13 SSL 接続のハンドシェイクで使用される可能な暗号のリスト
Ssl_key Source_SSL_Key 14 SSL キーファイルの名前
Ssl_verify_server_cert Source_SSL_Verify_Server_Cert 15 サーバー証明書を検証するかどうか
Heartbeat [None] 16 レプリケーションハートビートの間隔 (秒単位)
Bind Source_Bind 17 ソースへの接続に使用するレプリカネットワークインタフェース
Ignored_server_ids Replicate_Ignore_Server_Ids 18 無視するサーバー ID のリスト。 Ignored_server_ids の場合、サーバー ID のリストの前に、無視するサーバー ID の合計数が付きます。
Uuid Source_UUID 19 ソースの一意の ID
Retry_count Source_Retry_Count 20 許容される再接続試行の最大数
Ssl_crl [None] 21 SSL 証明書失効リストファイルへのパス
Ssl_crlpath [None] 22 SSL 証明書失効リストファイルを含むディレクトリへのパス
Enabled_auto_position Auto_position 23 GTID 自動配置が使用中かどうか
Channel_name Channel_name 24 レプリケーションチャネルの名前
Tls_version Source_TLS_Version 25 ソースの TLS バージョン
Public_key_path Source_public_key_path 26 RSA 公開キーファイルの名前
Get_public_key Get_source_public_key 27 ソースから RSA 公開キーをリクエストするかどうか
Network_namespace Network_namespace 28 ネットワークネームスペース
Master_compression_algorithm [None] 29 ソースへの接続に許可される圧縮アルゴリズム
Master_zstd_compression_level [None] 30 zstd 圧縮レベル
Tls_ciphersuites [None] 31 TLSv1.3 で許可される暗号スイート
Source_connection_auto_failover [None] 32 非同期接続フェイルオーバーメカニズムをアクティブ化するかどうか

アプライヤメタデータリポジトリの場合、次のテーブルに、mysql.slave_relay_log_info テーブルのカラム、SHOW REPLICA | SLAVE STATUS によって表示されるカラムおよび非推奨の relay-log.info ファイルの行の対応関係を示します。

slave_relay_log_info テーブルのカラム SHOW REPLICA | SLAVE STATUS カラム relay-log.info ファイルの行 説明
Number_of_lines [None] 1 ファイル内のテーブルまたは行のカラム数
Relay_log_name Relay_Log_File 2 現在のリレーログファイルの名前
Relay_log_pos Relay_Log_Pos 3 リレーログファイル内の現在の位置。この位置までのイベントがレプリカデータベース上で実行されています
Master_log_name Relay_Source_Log_File 4 リレーログファイル内のイベントが読み取られたソースバイナリログファイルの名前
Master_log_pos Exec_Source_Log_Pos 5 レプリカで実行されたイベントのソースバイナリログファイル内の同等の位置
Sql_delay SQL_Delay 6 レプリカがソースを遅らせる必要がある秒数
Number_of_workers [None] 7 レプリケーショントランザクションをパラレルに適用するワーカースレッドの数
Id [None] 8 内部目的に使用される ID。現在は常に 1 です
Channel_name Channel_name 9 レプリケーションチャネルの名前
Privilege_checks_username [None] 10 チャネルの PRIVILEGE_CHECKS_USER アカウントのユーザー名
Privilege_checks_hostname [None] 11 チャネルの PRIVILEGE_CHECKS_USER アカウントのホスト名
Require_row_format [None] 12 チャネルが行ベースのイベントのみを受け入れるかどうか
Require_table_primary_key_check [None] 13 CREATE TABLE および ALTER TABLE 操作のためにテーブルに主キーが必要かどうかに関するチャネルポリシー
Assign_gtids_to_anonymous_transactions_type [None] 14 チャネルが GTID をまだ持っていないレプリケートトランザクションに割り当てるかどうか、および割り当てられている場合はレプリカローカル UUID を使用するか手動で設定した UUID を使用するかどうか
Assign_gtids_to_anonymous_transactions_value [None] 15 匿名トランザクションに割り当てられた GTID で使用される UUID

関連キーワード:  テーブル, ソース, info, 接続, レプリケーションメタデータリポジトリ, None, ステートメント, バイナリ, チャネル, サーバー